packaged_task 、future知识点
packaged_task 、future知识点以下是对 packaged_task 和 future 的详细解释,尽量简单易懂并结合例子说明: 1. packaged_task 基本概念: packaged_task 是一个类模板,它将一个可调用对象(如函数、函数对象、lambda 表达式等)和一个 future 关联起来。它可以将可调用对象的结果存储在 future 中,以便在将来的某个时间点获取结果。 可以将 packaged_task 看作是一个任务包装器,它包装了一个任务,并允许你在另一个线程中执行该任务,同时提供一种机制,让你可以在其他地方获取该任务的结果。 使用示例: 12345678910111213141516171819202122#include <iostream>#include <thread>#include <future>#include <functional>int add(int a, int b) { return a + b;}int main()...
线程池 | 改进版
线程池 | 改进版1.改进点1.如何能让用户提交任务的过程更加简单方便? 1234从pool.submitTask(std::make_shared<MyTask>(1,...
线程池 | 测试代码
线程池 | 测试代码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596#include"threadpool.h"#include<chrono>using namespace std;/*有些场景是希望能够获取线程执行任务的返回值的举例:1+.....+30000的和thread1 1+..+10000thread2 10001+...+20000....main thread:给每个线程分配计算的区间,并等待算完的结果最后合并*/class MyTask :public Task{public: MyTask(int begin,int...
线程池 | Thread、ThreadPool类
线程池 | Thread、ThreadPool类1.线程池支持的模式123456//线程池支持的模式enum class PoolMode{ MODE_FIXED,//固定数量的线程 MODE_CACHED,//线程数量可动态增长}; 2.Thread类12345678910111213141516171819202122//线程类型class Thread{public: using ThreadFunc = std::function<void(int)>; //线程构造 Thread(ThreadFunc func); //线程析构 ~Thread(); //启动线程 void start(); //获取线程id int getId() const;private: ThreadFunc func_;//回调函数 static int generateId_;//单调自增的一个id,用来标识一个线程 int...
线程池 | ThreadPool的submitTask和threadFunc方法
线程池 | ThreadPool的submitTask和threadFunc方法123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263//线程池类型class ThreadPool{public: ThreadPool(); ~ThreadPool(); //设置线程池工作模式 void setMode(PoolMode mode); //设置task任务队列上限阈值 void setTaskQueMaxThresHold(int threshold); //设置线程池cached模式下线程数量上限 void setthreadSizeThresHold(int threshold); //给线程池提交任务 Result submitTask(std::shared_ptr<Task> sp); //启动线程池 返回值是当前电脑的CPU核心数量 void start(int...
线程池 | Result、Task类
线程池 | Result、Task类1.Task类123456789101112131415//任务抽象基类class Task{public: Task(); ~Task() = default; void exec(); void setResult(Result* res); //用户可以自定义任意任务类型,从Task继承,重写run方法,实现自定义任务处理 virtual Any run() = 0;private: //不用shared是避免了智能指针交叉引用的问题 Result* result_;//Result 的生存周期要长于Task}; 使用时,用户自己定义一个mytask类继承Task类,重写run方法完成自己想要的任务即可。 exec就是用来执行run()方法的一个包装函数 123456789101112131415//////////Task方法实现Task::Task():result_(nullptr){}void Task::exec(){ if (result_ !=...
线程池 | Any、Semaphore类
线程池 | Any、Semaphore类1.Any类123456789101112131415161718192021222324252627282930313233343536373839404142434445464748//Any类 表示可以接受任意数据的类型class Any{public: Any() = default; ~Any() = default; Any(const Any&) = delete; Any& operator=(const Any&) = delete; Any(Any&&) = default; Any& operator=(Any&&) = default; //这个构造函数可以让Any类型接受任意其它的数据 template <typename T> Any(T...
线程池项目总概述
线程池项目环境:vs2019开发,C++17标准;centos7编译so动态库 1.项目介绍作为五大池之一(内存池、连接池、线程池、进程池、协程池),线程池的应用非常广泛,不管是客户 端程序,还是后台服务程序,都是提高业务处理能力的必备模块。有很多开源的线程池实现,虽然各自 接口使用上稍有区别,但是其核心实现原理都是基本相同的。 2.知识背景熟练C++面向对象编程和C++ 11编程 1.熟练基于C++...
泰坦尼克号生存的预测任务
泰坦尼克号生存的预测任务学校作业,我来水一水 环境:pycharm+anaconda虚拟环境 0.环境搭建参考:学校机器学习_为了前进而后退,为了走直路而走弯路的博客-CSDN博客 1 目的与要求(1)目的: 本任务旨在使用机器学习算法预测泰坦尼克号乘客的生存情况。根据乘客的个人信息(如年龄、性别、船舱等级等),使用合适的模型来判断该乘客是否在事故中幸存。模型将对给定的测试集进行预测,并生成预测结果。(2)采用不同的机器学习算法进行建模(如:决策树、朴素贝叶斯、支持向量机)。对模型的性能进行评估,计算准确率。对比不同模型的准确率,通过可视化手段展示结果(如准确率折线图、混淆矩阵等)。输出每个模型的可视化结果并保存(如决策树的图示、特征重要性等)。 2 任务背景泰坦尼克号(RMS Titanic)是世界历史上最著名的沉船之一,1912年4月15日沉没。在事故中,约有1500多人失去了生命。根据该事件的相关数据集(包含乘客的个人信息及生死状态),我们可以构建模型预测乘客的生存概率。数据集包含的特征有:乘客的年龄、性别、船舱等级、票价、家庭成员数量等。 3...
基于VSCode和CMake实现的C/C++开发-Linux篇
基于VSCode和CMake实现的C/C++开发-Linux篇本次课程适合的对象: Linux零基础,想了解最常用的高频Linux命令的小伙伴 只会在Windows开发C/C++,需要转Linux开发的小伙伴 想深入了解并掌握GCC编译器编译语法和规则的小伙伴 想深入了解并掌握GDB调试器命令行调试的小伙伴 想学习使用CMake构建**C/C++**工程的小伙伴 想学习Linux下使用VSCode进行**C/C++**开发的小伙伴 总而言之,本课程将从零开始,教会你如何在Linux开发C/C++,带领你一起打开新世界的大门~ 系统环境:Ubuntu18.04 LTS 虚拟机 开发语言:C++ 开发IDE ...













