VC6.0中C++实现线程池

在项目中,由于移动设备需要跟管理中心进行请求服务,在管理中心使用并发模式对请求进行处理(与其对应的是轮询模式),由于每次连接就需要创建一个线程对相应的请求提供服务,所以需要频繁的创建线程,而服务结束或者连接断开又需要销毁线程,这样一个过程对系统的开销很大。再加上管理中心的其它模块也需要频繁的开启和销毁线程,所以最终为了使系统更加稳定,决定加上线程池。

    但是由于之前都是在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

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值