线程池 | 测试代码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 end) :begin_(begin),end_(end){} //问题1:怎么设计run函数的返回值,可以表示任意的类型呢? Any run() { std::cout << "tid:" << std::this_thread::get_id() <<"begin!" << std::endl; std::this_thread::sleep_for(std::chrono::seconds(20)); int sum = 0; for (int i = begin_; i <= end_; i++) sum += i; std::cout << "tid:"<< std::this_thread::get_id() << "end!" << std::endl; return sum; }private: int begin_; int end_;};int main(){ /* { ThreadPool pool; pool.setMode(PoolMode::MODE_CACHED); pool.start(4); Result res1 = pool.submitTask(std::make_shared<MyTask>(1, 100)); Result res2 = pool.submitTask(std::make_shared<MyTask>(101, 200)); Result res3 = pool.submitTask(std::make_shared<MyTask>(201, 300)); pool.submitTask(std::make_shared<MyTask>(201, 300)); pool.submitTask(std::make_shared<MyTask>(201, 300)); pool.submitTask(std::make_shared<MyTask>(201, 300)); int sum1 = res1.get().cast_<int>(); int sum2 = res2.get().cast_<int>(); int sum3 = res3.get().cast_<int>(); //Master-Slave线程模型 //Master线程用来分解任务,然后给各个Salve线程分配任务 //等待各个Slave线程执行完任务,返回结果 //Master线程合并各个任务结果,输出 std::cout << "最后结果:" << (sum1 + sum2 + sum3) << std::endl; } //pool.submitTask(std::make_shared<MyTask>()); //pool.submitTask(std::make_shared<MyTask>()); //pool.submitTask(std::make_shared<MyTask>()); //主线程结束过快会导致没有测试的现象,因为我们把线程分离了,各自执行各自的内容. //std::this_thread::sleep_for(std::chrono::seconds(5)); getchar(); */ { ThreadPool pool; pool.setMode(PoolMode::MODE_CACHED); pool.start(2); Result res1 = pool.submitTask(std::make_shared<MyTask>(1, 100)); Result res2 = pool.submitTask(std::make_shared<MyTask>(1, 100)); Result res3 = pool.submitTask(std::make_shared<MyTask>(1, 100)); Result res4 = pool.submitTask(std::make_shared<MyTask>(1, 100)); Result res5 = pool.submitTask(std::make_shared<MyTask>(1, 100)); //int sum1 = res1.get().cast_<int>(); //std::cout << "最后结果:" << sum1 << std::endl; } std::cout << "main over" << std::endl; getchar(); return 0;}