功能:
1:可以使用类成员函数/全局函数单独的创建一个线程,可以带多个参数。
2:可以使用类成员函数/全局函数单独的为线程池添加一个任务,可以带多个参数。
3:线程池的线程数量可手动扩展,稍作修改可以修改为自动扩充,由大家看需要进行更改,这里只做抛砖引玉。
下载地址:https://download.csdn.net/download/j506825719/10332456
使用方法:
ThreadPoolTool::StartThread(this, &FileTool::onReachedBottom,1,"2");//静态函数,独立为成员函数开启一个线程,后面的1,"2"最后的是参数
ThreadPoolTool::StartThread(this, &FileTool::onReachedBottom);//静态函数,独立为成员函数开启一个线程,没有参数
ThreadPoolTool::StartThread(onReachedBottom,1,"2");//静态函数,独立为非成员函数开启一个线程,后面的1,"2"最后的是参数
ThreadPoolTool::StartThread(onReachedBottom);//静态函数,独立为非成员函数开启一个线程,没有参数
ThreadPoolTool tt;//默认的无参数构造方法,线程池的线程数量时CPU核心的2倍
//ThreadPoolTool *tt=new ThreadPoolTool(20);有参数构造方法,指定线程池的线程数量
tt.AddTask(this, &FileTool::onReachedBottom,1,"2");//添加一个成员函数的线程任务,后面的1,"2"最后的是参数
tt.AddTask(this, &FileTool::onReachedBottom);//添加一个成员函数的线程任务,没有参数
tt.AddTask(onReachedBottom,1,"2");//添加一个非成员函数的线程任务,后面的1,"2"最后的是参数
tt.AddTask(onReachedBottom);//添加一个非成员函数的线程任务,没有参数
int num = tt.getCurrentThreadPoolSize();//获取当前线程池的线程数量
num = tt.getDefaultThreadPoolSize();//获取默认线程池的线程数量
tt.SetThreadCount(num);//设置线程池的线程数量
tt.ChangeThreadNum(num);//加减线程池的数量,正数就增加线程,负数就减少
类接口:
#pragma once
#include <Windows.h>
#include <functional>
#include <queue>
class ThreadPoolTool
{
public:
//默认无参构造函数
//默认线程池线程数量为CPU核心的两倍
ThreadPoolTool(){
};
//有参构造函数,被无参构造函数调用
ThreadPoolTool(int tempDefaultThreadPoolSize) {
};
//静态函数,独立的创建一个线程,函数是类成员函数
template<typename xClass, typename xReturn, typename...xParam>
static HANDLE StartThread(xClass* pThis, xReturn(xClass::* pfn)(xParam...), xParam...lp) {
}
//静态函数,独立的创建一个线程,非类成员函数
template<typename xReturn, typename...xParam>
static HANDLE StartThread(xReturn(*pfn)(xParam...), xParam...lp) {
}
//为线程池添加一个成员函数的线程任务
template<typename xClass, typename xReturn, typename...xParam>
void AddTask(xClass* pThis, xReturn(xClass::* pfn)(xParam...), xParam...lp) {
}
//为线程池添加一个成员函数的线程任务
template<typename xReturn, typename...xParam>
void AddTask(xReturn(*pfn)(xParam...), xParam...lp) {
}
//为线程池添加一个线程任务
void AddTask(std::function<void()> t) {
}
//修改线程池的线程数量,可为正数,负数
void ChangeThreadNum(int changeNum) {
}
//停止线程池
void StopThreadPool() {
}
//设置线程池数量
void SetThreadCount(int count) {
}
//获取当前的线程池的线程数量
int getCurrentThreadPoolSize() {
}
//获取当前的线程池的默认线程数量
int getDefaultThreadPoolSize() {
}
private:
std::function<void()> t;
std::queue<std::function<void()>> m_taskQueue;
CRITICAL_SECTION ThreadPoolSection;
int defaultThreadPoolSize = 0;
int currentThreadPoolSize = 0;
HANDLE TaskSemaphoreCount;
HANDLE ExitSemaphoreCount;
ThreadPoolTool(std::function<void()> Tasktemp)
{
}
static DWORD WINAPI Thread(LPVOID lp)
{
}
void ThreadPoolTask()
{
}
};