Win32下线程池实现
来源:互联网 发布:矩阵分析引论课后答案 编辑:程序博客网 时间:2024/04/30 18:45
关于线程池的原理及java实现,我在http://shallway.net/?p=109 有写过。我现在只是讨论下Win32下的线程池,道理一个样。
当然,除了自己实现线程池,更建议使用官方的线程池库,比如java的Executors,Windows下的ThreadPoll API(具体可查阅windows核心编程第11章),但是Windows下的线程池API只支持VISTA以上版本。。
一开始我就说过,个人不太喜欢程序里到处布满杂乱的WINDOWS API,所以仿照http://shallway.net/?p=109 ,我写了个windows下的线程池。至少经测试没有同步错误,但是效率可能差点。:)
线程池的关键就是BlockingQueue的实现,有了它后自己再创建一堆线程阻塞在上面就OK。
懒得整理了。。。我就直接搬NetWay的相关代码了。。。下面是BlockingQueue的核心实现,虽然代码不全,但是很容易还原成完整的类的,需要完整代码的课查阅NetWay源码。。。
#include "EventQueue.h"
#include
void EventQueue::enqueue(std::string e)
{
mutex.Lock();
events.push_back(e);
PulseEvent(hEventObject);
mutex.Unlock();
}
EventQueue::EventQueue(const std::string &name)
{
hEventObject = CreateEventA(NULL, // Security
FALSE, // Automatic (FALSE = not manual)
0, // Clear on creation
name.data()); // Name of object
if (GetLastError() == ERROR_ALREADY_EXISTS)
{
exit(0);
}
}
std::string EventQueue::dequeue()
{
std::string e;
TT:
while(events.size() == 0 )
{
WaitForSingleObject(hEventObject, INFINITE);
}
mutex.Lock();
if(events.size() != 0)
{
e = events.front();
events.pop_front();
}
else
{
mutex.Unlock();
goto TT;
}
mutex.Unlock();
return e;
}
int EventQueue::size()
{
mutex.Lock();
int len = events.size();
mutex.Unlock();
return len;
}
EventQueue::~EventQueue()
{
CloseHandle(hEventObject);
}
以上代码假设BlockingQueue存储的是string对象。。还有用到了goto。。实在万不得已,要不会有同步错误。。
- Win32下线程池实现
- Win32下的线程和MFC的线程实现
- win32下线程封装
- win32线程池代码
- win32线程池代码
- win32线程池代码
- win32 线程池
- win32线程池
- win32下实现透明窗口
- 在Win32下,线程中的事件使用
- Win32平台下的线程同步
- 关于Win32下创建线程的总结
- Linux下线程池实现
- 同步事件,信号量,互斥,临界区,线程,线程池C++实现(win32,linux)
- Win32线程锁的一种高效实现
- 简单线程注入的实现(win32汇编语言)
- 简单线程注入的实现(win32汇编语言)
- Win32 线程
- 深入理解Direct3D9
- 成功男人应该记住的
- ora-12154 TNS:"无法处理服务名"
- C#中简单值类型占存储空间的大小
- 蚂蚁过杆问题整理
- Win32下线程池实现
- MIDP图形用户界面结构分析
- 文件流 打开文件
- 发布NetWay网络编程引擎测试版。
- 新增行与删除行
- 男孩儿要穷养,女孩儿要富养
- SVN服务器windows服务自启动设置
- 关于va和字节对齐
- wamp注意事项