threadpool -- 线程池
2016-03-22 17:50
423 查看
threadpool
由于自己项目需要,就设计了一个线程池,可以在windows、linux、ios上跑,亲测有效哦。next - express process
**Process<T> m_Process;** //定义一个处理器 **void Init(int nTask,int nThread);** //init:初始化任务和线程,以及准备一些变量的初始化 //ntask:初始化一个任务数量,这个数量为了防止每次来了新任务都进行push和pop操作,所以在初始化的时候,传进去一个初始值,如果任务量比这个初始值还要大的话,进在进行添加 //nThread:初始化一个线程池的数量,如果定义1000个线程,那么这个线程池中也就有1000的线程,每次线程有忙闲状态,如果任务量没有当前可处理的现成,那么就等待,等有空闲的线程,就从线程池中取出可用的线程进行处理 **void Uninit();** //Uninit:反初始化任务和线程 **void Start(void (__stdcall*WorkProc)(int nThreadID, void *pTask, void* pUser),void * pParams);** //start:开启整个线程池 //void (__stdcall*)(int nThreadID, void *pTask, void* pUser):回调函数,这个回调函数用来处理自己的业务逻辑,nthreadID是线程当前的number号码,pTask:是自己定义的任务指针,pUser:用户自定义的参数。 //pParams:用户自定义参数 **void Stop();** //start:关闭整个线程池 **int PushTask(T * task);** //PushTask:往任务队列中添加任务 //task:任务指针 **void FreeTask(T * pTask);** //FreeTask:释放task指针,由于整个线程池中的任务有线程池中自己创建的,也有外部后来创建的,所以每个任务处理完,都需要释放该任务,如果任务是线程池中的任务,那么内部初始化创建的话,则直接添加到空闲任务队列中,如果是外部创建的话,则delete掉。 //task:任务指针 **T * GetTask();** //GetTask:从线程池的任务队列中去取空闲的任务,如果此时没有空闲的任务,则返回NULL,有的话,就返回空闲的任务指针。
next - show the code about using
Process<int> m_Process; void __stdcall DoSomething(int nThreadID, void *pTask, void* pUser) { //dosomething m_Process.FreeTask((int *)pTask); } int _tmain(int argc, _TCHAR* argv[]) { m_Process.Init(10000,1000); m_Process.Start(DoSomething,NULL); for ( int i = 0 ; i < 1000000 ; i++ ) { int * pTask = m_Process.GetTask(); if ( pTask == NULL ) { pTask = new int; *pTask = i; m_Process.PushTask(pTask); } else { *pTask = i; m_Process.PushTask(pTask); } } }
这是threadpool 的github地址:https://github.com/NickXhh/threadpool
相关文章推荐
- javascript中的稀疏数组(sparse array)和密集数组
- 【转】关于Eclipse创建Android项目时,会多出一个appcompat_v7的问题
- unity,List元素第一个成员最好是string类型
- say
- iOS 利用 strtoul 进行 进制转换
- 238. Product of Array Except Self
- [置顶] 遍历查找集合或者数组中的某个元素的值 java代码 详解 Android开发
- Java源码学习之Integer类(二)——1.8新增的几个函数和变量
- 哈理工OJ 1219 谁拿了最多奖学金
- 【Poj 3414】 Pots BFS
- 浪潮英信服务器做raid1
- Hive损失精度
- 用PL SQL 连接ORACLE 10G 报 ORA-12154错误
- 通达信股本变迁文件(gbbq)解密方法
- CName 和 A类记录的区别
- 从公司买火车票到代理模式和适配器模式
- WebStorm2016.1 破解 激活
- Retrofit2和RxJava配合使用Demo
- jq 超简单跳楼效果解析
- WebViewJavascriptBridge 解析