ThreadPoolModel.cpp
资源名称:1731.rar [点击查看]
上传用户:swkcbjrc
上传日期:2016-04-02
资源大小:45277k
文件大小:3k
源码类别:
游戏
开发平台:
Visual C++
- // ThreaoolModel.cpp: implementation of the CThreadPoolModel class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "ThreadpoolModel.h"
- #include "globfunction.h"
- #ifdef _DEBUG
- #undef THIS_FILE
- static char THIS_FILE[]=__FILE__;
- #define new DEBUG_NEW
- #endif
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- const DWORD _THREADDEAD_TIMEOUT= 4*1000;// 4秒线程死亡超时
- CThreadPoolModel::CThreadPoolModel()
- {
- InitAll();
- }
- CThreadPoolModel::~CThreadPoolModel()
- {
- DeleteAll();
- }
- //显示当前线程数量
- //input: void
- //output: 返回线程情况串
- CString CThreadPoolModel::ShowThreadInfo(void)
- {
- CString strShow;
- strShow.Format(
- "最大线程=%d,当前线程=%d,工作线程=%d,临界线程=%dn",
- m_nMaxThreadCount,m_nCurAllThreadCount,
- m_nCurWorkThreadCount,m_nCriThreadCount);
- return strShow;
- }
- //初始化所有信息
- //input: void
- //output: void
- void CThreadPoolModel::InitAll(void)
- {
- InitCriticalSection();
- m_nMaxThreadCount=0;
- m_nCurAllThreadCount=0;
- m_nCurWorkThreadCount=0;
- m_nErrorNo=0;
- m_hAllDeadEvent=NULL;
- m_hMainWnd=NULL;
- m_hAllDeadEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
- m_nCriThreadCount=0;
- }
- //删除所有包括句柄
- //input: void
- //output: void
- void CThreadPoolModel::DeleteAll(void)
- {
- DestroyCriticalSection();
- CloseHandle(m_hAllDeadEvent);
- }
- void CThreadPoolModel::InitCriticalSection(void)
- {
- ::InitializeCriticalSection(&m_csErrorNo);
- }
- void CThreadPoolModel::DestroyCriticalSection(void)
- {
- ::DeleteCriticalSection(&m_csErrorNo);
- }
- //创建新线程
- //input: 线程函数指针,参数指针,线程句柄地址,线程ID地址
- //output: TRUE/FASLE
- BOOL CThreadPoolModel::CreateNewThread(lpCallBack *pfnThrearoc ,LPVOID pParam,
- HANDLE &hNewThread,
- DWORD &dwThreadId)
- {
- //如果当前工作线程大于或等于临界线程量,那么我们创建新的线程
- if(m_nCurAllThreadCount>=m_nMaxThreadCount)
- return FALSE;
- if(pfnThrearoc==NULL)
- {
- TPSetLastError(ERROR_THREADPOOL_FULL);
- return FALSE;
- }
- DWORD dwThreadIdTemp=0;
- //创建新线程
- hNewThread=chBEGINTHREADEX(NULL,0,pfnThrearoc,pParam,0,&dwThreadIdTemp);
- dwThreadId=dwThreadIdTemp;
- //增加当前存在线程数量
- IncrementCurAllThreadCount();
- return TRUE;
- }
- void CThreadPoolModel::IncrementCurAllThreadCount(void)
- {::InterlockedIncrement((LPLONG)&m_nCurAllThreadCount);}
- void CThreadPoolModel::DecrementCurAllThreadCount(void)
- {::InterlockedDecrement((LPLONG)&m_nCurAllThreadCount);}
- void CThreadPoolModel::SetCurAllThreadCount(int nCount)
- {::InterlockedExchange((LPLONG)&m_nCurAllThreadCount,nCount);}
- void CThreadPoolModel::IncrementCurWorkThreadCount(void)
- {
- ::InterlockedIncrement((LPLONG)&m_nCurWorkThreadCount);
- }
- void CThreadPoolModel::DecrementCurWorkThreadCount(void)
- {::InterlockedDecrement((LPLONG)&m_nCurWorkThreadCount);}
- void CThreadPoolModel::SetCurWorkThreadCount(int nCount)
- {::InterlockedExchange((LPLONG)&m_nCurWorkThreadCount,nCount);}
- void CThreadPoolModel::IncrementCriThreadCount(void)
- {::InterlockedIncrement((LPLONG)&m_nCriThreadCount);}
- void CThreadPoolModel::DecrementCriThreadCount(void)
- {::InterlockedDecrement((LPLONG)&m_nCriThreadCount);}
- void CThreadPoolModel::SetCriThreadCount(int nCount)
- {::InterlockedExchange((LPLONG)&m_nCriThreadCount,nCount);}