但是由于之前都是在C++类中创建线程。As you see ,在C++类中创建线程是有限制的,为了使已经写好的代码维持最小改动,我将网上广为流传的线程池代码(至今没有找到一个可以顺利运行并直接使用的例子)进行了加工,使其满足我们项目的要求。现在还在测试中,到目前为止还没出现什么问题。遂上传跟大家共享,相互学习,相互交流。
代码的讲解说明暂时还没有写,不确定大家是否需要,而且最近也比较忙,所以就偷了一下懒。
VC6.0中C++实现线程池完整工程加DLL封装下载地址:
http://download.csdn.net/detail/pinghegood/6549975(这个版本忘了封装DLL)
* 2012.12.17修改一个 bug
catch(...){
//m_functionAndParamMutex.Lock(); //可能出现死锁
TRACE0("Process Job error !");
}
*2012.12.19日修改一个bug
BOOL CWorkerThread::Terminate()
{
//HANDLE tempHandle = GetThreadHandle();
//TRACE0("当前线程Terminate\n");
m_threadRunFlagMutex.Lock();
m_threadRunFlag = FALSE;
m_threadRunFlagMutex.Unlock();
ResumeThread(m_ThreadHandle);
int ret;
ret = ::WaitForSingleObject(m_ThreadHandle,1);
if (WAIT_OBJECT_0 != ret) //注意:需要根据返回值来确定是否应该强制结束
{
DWORD dwExitCode;
GetExitCodeThread(m_ThreadHandle,&dwExitCode);
TerminateThread(m_ThreadHandle,dwExitCode);
::CloseHandle(m_ThreadHandle);
}
m_ThreadHandle = NULL;
return TRUE;
}
2013.1.5 日:注意提交的任务函数要使用标准调用方式 WINAPI。
2013.4.1 日:修改一个bug,CThreadManage默认构造函数调用失败
删除CThreadManage::CThreadManage(),给带参数构造函数设置默认值。具体原因见http://blog.csdn.net/pinghegood/article/details/8745568
2013.11.14 日:修改资源不释放bug,程序中所以使用Create