-
Notifications
You must be signed in to change notification settings - Fork 0
ThreadPool
QY Li edited this page Apr 3, 2024
·
4 revisions
线程池类,用于管理线程。
获取线程池对象。
static Pool* GetPool() noexcept;线程池对象指针
一个程序中只能存在一个线程池对象。
添加任务到任务队列。
template<class Func, class... Args>
auto AddTask(Func&& func, Args&&... args) -> std::shared_ptr<Task<decltype(func(args...))>>;
template<class Func, class Instance, class... Args>
auto AddTask(Func&& func, Instance&& instance, Args&&... args) -> std::shared_ptr<Task<decltype((instance->*func)(args...))>>;func 函数指针
instance 函数所属对象指针
args 函数执行所需参数
用于监控任务完成状态的 ThreadPool::Task 的共享指针,类型与 func 的返回值一致
在传递成员函数时,将使用第二个重载。
此共享指针在此方法中创建,并在子线程中对指针所指变量进行更新。即使忽略该方法的返回值,该共享指针也将在子线程结束时被释放。
等待所有任务完成。
void WaitAll();此方法会阻塞当前线程,直到所有任务完成。
构造 ThreadPool::Pool 对象。
Pool (size_t size = 4);size 线程池中线程数量
默认线程数量为4个。
一个程序中只能存在一个线程池对象,多次调用构造函数将出现异常。
线程池对象在出作用域时自动销毁。