在这里,这里以及其他地方学了很多 最核心的两个函数:push_task()和add_thread()
使用模板参数列表、函数返回类型后置和自动推断类型等技巧,使用户可以使用线程池处理自己的task()
推荐使用STL容器处理多个任务,类型为std::future<ret_type>
,就比如下面这样:
std::vector<std::future<int>> tasks;
然后将自己的任务函数emplace_back()
进去
threadPool::push_task(func_name, func_para, func_para2, ...)
推荐使用带返回值的任务函数,这样可以通过在主函数返回前对容器内的future
的get()
操作,使得在每个线程在执行完后才会退出,当然也可以不设置返回值,但这样就只有用std::this_thread::sleep_for()
来达到上述目的了
本线程池设置最大线程数量为16,超过会报错
threadPool
对象内置std::vector
来存储线程,当有任务时从任务队列中取出并执行,没任务就使用条件变量std::condition_variable
阻塞wait()
,直到停止运行或有任务