简单封装一下 win内核线程池 以后直接继承 不用复写
来源:互联网 发布:淘宝正道体育 编辑:程序博客网 时间:2024/05/26 02:54
#pragma once#include <windows.h>#include <iostream>class MyThreadPoll{public:MyThreadPoll();virtual~MyThreadPoll();void InitThreadAndEnviron(unsigned int minNum = 1, unsigned int maxNum = 500);void CleanThreadAndEnviron();bool isThreadPoolInit(){ return _isThreadPoolInit; }bool PushThread(VOID(NTAPI *Func)( PTP_CALLBACK_INSTANCE Instance, PVOID Context) = NULL, void *param = NULL);void SetThreadRunsLong();void SetThreadCallLibrary(void *param);protected:bool _isThreadPoolInit;PTP_POOL _pool;PTP_CALLBACK_ENVIRON _environ;};MyThreadPoll::MyThreadPoll() :_pool(0), _environ(0), _isThreadPoolInit(0){}MyThreadPoll::~MyThreadPoll(){if (_isThreadPoolInit)CleanThreadAndEnviron();}void MyThreadPoll::InitThreadAndEnviron(unsigned int minNum /*= 1*/, unsigned int maxNum /*= 500*/){if (!_isThreadPoolInit){_pool = CreateThreadpool(0);_environ = new TP_CALLBACK_ENVIRON();SetThreadpoolThreadMinimum(_pool, minNum);SetThreadpoolThreadMaximum(_pool, maxNum);InitializeThreadpoolEnvironment(_environ);//开始绑定SetThreadpoolCallbackPool(_environ, _pool);_isThreadPoolInit = !_isThreadPoolInit;}}void MyThreadPoll::CleanThreadAndEnviron(){if (_isThreadPoolInit){DestroyThreadpoolEnvironment(_environ);//清理线程环境CloseThreadpool(_pool);//关闭线程_pool = NULL;delete _environ;_environ = NULL;_isThreadPoolInit = !_isThreadPoolInit;}}bool MyThreadPoll::PushThread(VOID(NTAPI *Func) ( PTP_CALLBACK_INSTANCE Instance, PVOID Context) /*= NULL*/, void *param /*= NULL*/){if (!Func)return false;TrySubmitThreadpoolCallback(Func, param, _environ);return true;}void MyThreadPoll::SetThreadRunsLong(){if (_environ)SetThreadpoolCallbackRunsLong(_environ);}void MyThreadPoll::SetThreadCallLibrary(void *param){if (param == NULL)return;if (_environ)SetThreadpoolCallbackLibrary(_environ, param);}
这当然是一部分封装 还有 工作者 io time 等等 原则差不多 就不贴出来了
以后写 IO Sock时 或文件 时 直接继承 节省不事 可谓轻松加愉快
0 0
- 简单封装一下 win内核线程池 以后直接继承 不用复写
- WIN内核线程池函数
- 简单说一下线程池
- 简单封装一下AFNetworking
- Map封装,方便以后直接调用
- 封装,简单继承
- 字符串存在判定,以后不用自己写了,直接copy
- 《程序员的第一年》---------- 复习一下C#的【封装 多态 继承 -----简单计算器源码实例】
- ajax简单的封装一下
- 线程封装类(3) win
- 线程池的简单封装和使用
- win32线程简单封装
- Windows线程简单封装
- 不用win PE启动制作启动U盘直接安装win 7
- AngularJs $Https 简单复写
- 用C++简单封装了一下SQLite
- 简单了解了一下 Java线程池 ThreadPoolExecutor
- 简单记录一下sping线程池的配置和实现
- 主动通知Android系统图库进行更新
- PHP session 失效不传递的解决办法
- Jquery dom查找方法 性能分析
- android中xml tools属性详解
- iPhone4/4s运行iOS7慢怎么办
- 简单封装一下 win内核线程池 以后直接继承 不用复写
- Android移动APP开发笔记——Cordova(PhoneGap)通过CordovaPlugin插件调用 Activity 实例
- android webview js alert对话框 不能弹出 解决办法
- iOS UILabel详解
- 依赖倒置原则
- 用Canvas画带动画的渐变数字圆环
- windows10刻录并在新硬盘安装Fedora25
- ListView 卡顿的原因
- 面向对象方式解决比赛名单类问题(Java实现)