使用timerSetEvent的限制

来源:互联网 发布:淘宝上1元包邮赚钱吗 编辑:程序博客网 时间:2024/05/10 20:19

估计是系统后台资源有限,单进程中只支持16个。相关的官方文章中没有类似说明。附上整理的代码

typedef bool (*pWinThreadCallbackFun)(void* pUser);static volatile long m_nTotalThreadCount;void CALLBACK CRython_MMTimer::TimerHandler(UINT id, UINT msg, DWORD dwUser, DWORD dw1, DWORD dw2){ CMMTimer* pThis = (CMMTimer*)dwUser; pThis->m_pThreadCallbackFun(pThis->m_pUser);}UINT CMMTimer::CreateTimer(int nSleepMS){ timeBeginPeriod(timeRes); UINT timerID = timeSetEvent(  nSleepMS,  timeRes,   TimerHandler,  (DWORD)this,  TIME_PERIODIC); return timerID;}BOOL CMMTimer::Start(pWinThreadCallbackFun pWinThreadCallbackFun,void* pUser,int nSleepMS){ BOOL bFlag = FALSE; if (!m_bThreadRuning) {  m_bThreadRuning =TRUE;  m_pThreadCallbackFun=pWinThreadCallbackFun;  m_pUser=pUser;          hTimer = CreateTimer(nSleepMS);   if(NULL != hTimer)  {   InterlockedIncrement(&m_nTotalThreadCount);   bFlag = TRUE;  }  else  {   int eror = GetLastError();//创建第17个,显示183错误   m_bThreadRuning=FALSE;  } } return bFlag;}void CMMTimer::Stop(){ if (m_bThreadRuning) {  m_bThreadRuning=FALSE;  timeKillEvent(hTimer);  timeEndPeriod(timeRes);  InterlockedDecrement(&m_nTotalThreadCount);  timeRes = 1;  hTimer = 0; }}
原创粉丝点击