青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

小步慢跑

 

基于 TimerQueue 的定時器封裝類

本來以為是很簡單的事,沒想到又牽涉出了線程池,APC,內核定時器對象一大堆沒搞明白的知識。先把代碼保存下。牽涉到的知識再慢慢消化。

主要使用了以下 API。這些API還是有不少的陷阱(注意點)的,《windows 核心編程》的第11章有詳細的解釋。

   1: CreateTimerQueue
   2: DeleteTimerQueueEx
   3:  
   4: CreateTimerQueueTimer
   5: DeleteTimerQueueTimer

h文件

   1: #pragma once
   2:  
   3:  
   4: /*
   5:  *    無窗口的定時器方案
   6:  */
   7:  
   8: #include "singleton.h" 
   9:  
  10: typedef tr1::function<void(DWORD dwID,DWORD dwUserData)> TimerFunObj;
  11:  
  12: class CTimerMgr
  13: {
  14: public:
  15:     CTimerMgr(void);
  16:     ~CTimerMgr(void);
  17:  
  18:  
  19: public:
  20:     bool SetTimer(DWORD dwID,DWORD dwElapse,TimerFunObj,DWORD dwUserData);
  21:     bool KillTimer(DWORD dwID);
  22:  
  23: private:
  24:  
  25:     typedef map<DWORD ,HANDLE>  MAP_ID_2_HANDLE;
  26:     MAP_ID_2_HANDLE m_mapTimerID2Handle; //定時器id 映射到定時器的handle
  27:  
  28:     HANDLE m_hTimerQueue;
  29: };
  30:  
  31: typedef Singleton<CTimerMgr> TimerService;
  32:  
  33: struct TCBParam
  34: {
  35:     CTimerMgr*  m_pThis;
  36:     DWORD       m_dwTimerID;
  37:     TimerFunObj m_func;
  38:     DWORD       m_dwUserData;
  39: };
  40: extern void _stdcall  TimerCBProc(PVOID lpParamter,BOOL TimerorWaitFired);

 

cpp文件

   1: #include "StdAfx.h"
   2: #include "TimerMgr.h"
   3:  
   4:  
   5: CTimerMgr::CTimerMgr(void):m_hTimerQueue(NULL)
   6: {
   7:     m_hTimerQueue = ::CreateTimerQueue();
   8:     VERIFY(NULL != m_hTimerQueue);
   9: }
  10:  
  11:  
  12: CTimerMgr::~CTimerMgr(void)
  13: {
  14:     if (NULL != m_hTimerQueue)
  15:     {
  16:         // INVALID_HANDLE_VALUE:會導致DeleteTimerQueueEx等待所有的timer對應的回調方法完成后再返回
  17:         DeleteTimerQueueEx(m_hTimerQueue,NULL);
  18:     }
  19: }
  20:  
  21: // dwElapse :milliseconds
  22: bool CTimerMgr::SetTimer( DWORD dwID,DWORD dwElapse,TimerFunObj timerfunc,DWORD dwUserData)
  23: {
  24:     VERIFY(NULL != m_hTimerQueue);
  25:     
  26:     TCBParam* ptParam     = new TCBParam;
  27:     ptParam->m_pThis      = this;
  28:     ptParam->m_dwTimerID  = dwID;
  29:     ptParam->m_func       = timerfunc;
  30:     ptParam->m_dwUserData = dwUserData;
  31:  
  32:     HANDLE hTimer = NULL;
  33:     if( 0 != CreateTimerQueueTimer(&hTimer,m_hTimerQueue,(WAITORTIMERCALLBACK)TimerCBProc,(void*)ptParam,dwElapse,0,WT_EXECUTEDEFAULT))
  34:     {
  35:         m_mapTimerID2Handle[dwID] = hTimer;
  36:         return true;
  37:     }
  38:     else //失敗
  39:     {
  40:         delete ptParam;
  41:         ptParam = NULL;
  42:         return false;
  43:     }
  44:  
  45: }
  46:  
  47: bool CTimerMgr::KillTimer( DWORD dwID )
  48: {
  49:     MAP_ID_2_HANDLE::iterator it = m_mapTimerID2Handle.find(dwID);
  50:  
  51:     if (it == m_mapTimerID2Handle.end())//不存在
  52:         return false;
  53:         
  54:     HANDLE hTimer = it->second;
  55:     BOOL bSuc = ( 0 != ::DeleteTimerQueueTimer(m_hTimerQueue,hTimer,NULL) );
  56:  
  57:     if (bSuc )
  58:     {
  59:         m_mapTimerID2Handle.erase(it);
  60:         return true;
  61:     }
  62:     //之前定義的處理函數即將被調用或正在被調用,立刻返回,但系統會在處理函數調用完成后自動刪除這個定時器
  63:     else if (ERROR_IO_PENDING ==  GetLastError())
  64:     {
  65:         m_mapTimerID2Handle.erase(it);
  66:         return true;
  67:     }
  68:     else
  69:     {
  70:         return false;
  71:     }
  72:         
  73:         
  74:     
  75:     
  76: }
  77:  
  78:  
  79: void _stdcall TimerCBProc( PVOID lpParamter,BOOL TimerorWaitFired )
  80: {
  81:     TCBParam* ptParam = (TCBParam*)lpParamter;
  82:     if (NULL == ptParam)
  83:         return;
  84:     CTimerMgr*  pThis      = ptParam->m_pThis;
  85:     DWORD       dwTimerID  = ptParam->m_dwTimerID;
  86:     TimerFunObj funcTimer  = ptParam->m_func;
  87:     DWORD       dwUserData = ptParam->m_dwUserData;
  88:  
  89:     funcTimer(dwTimerID,dwUserData);
  90:     
  91:     delete ptParam;
  92:     ptParam = NULL;
  93: }

調用代碼:

   1: class CInvoker
   2: {
   3: public:
   4:     void TimerProc(DWORD dwID,DWORD dwUserData )
   5:     {
   6:         //...
   7:     }
   8: }
   9:  
  10: CInvoker _invoker;
  11: TimerFunObj  proc = tr1::bind(&CInvoker::TimerProc,&_invoker,tr1::placeholders::_1,tr1::placeholders::_2);

posted on 2012-08-14 19:09 zaccheo 閱讀(1049) 評論(0)  編輯 收藏 引用 所屬分類: C++ win32/MFC

導航

統計

常用鏈接

留言簿

隨筆分類(23)

隨筆檔案(26)

文章分類(1)

文章檔案(1)

csdn

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久伊伊香蕉| 国产一区二区三区无遮挡| 亚洲国产婷婷| 精品成人在线视频| 国内精品嫩模av私拍在线观看| 国产女人精品视频| 国产精品一区二区三区免费观看| 国产欧美一二三区| 伊人精品成人久久综合软件| 亚洲人www| 亚洲欧美第一页| 另类综合日韩欧美亚洲| 亚洲电影在线免费观看| 亚洲老板91色精品久久| 亚洲一本大道在线| 久久久蜜桃一区二区人| 欧美精品性视频| 国产午夜精品一区二区三区视频| 1000部精品久久久久久久久| 宅男噜噜噜66一区二区66| 欧美在线视频a| 亚洲国产精品一区二区www在线 | 欧美一级艳片视频免费观看| 久久综合伊人| 国产精品五月天| 亚洲精品黄色| 久久久综合网| 在线亚洲高清视频| 免费的成人av| 国产一区二区三区黄| 亚洲少妇中出一区| 免费在线亚洲| 欧美一区观看| 欧美日韩精品二区第二页| 国语精品中文字幕| 午夜精品久久久久久99热软件| 欧美高清在线| 欧美一区二区三区四区在线观看地址 | 亚洲国内自拍| 久久精品在线视频| 国产精品私房写真福利视频 | 国产一区二区成人| 亚洲摸下面视频| 亚洲国产一区二区三区青草影视| 欧美在线免费视频| 国产精品乱人伦一区二区 | 日韩一级视频免费观看在线| 久久久久一区二区三区| 亚洲小少妇裸体bbw| 欧美日韩a区| 亚洲精品中文字| 国产伦精品一区二区三区四区免费 | 国产日韩欧美一区在线 | 亚洲茄子视频| 女女同性精品视频| 午夜视频在线观看一区二区三区| 国产精品va在线播放| 一本久道久久综合狠狠爱| 亚洲第一区色| 欧美激情区在线播放| 日韩亚洲欧美综合| 亚洲精品乱码久久久久久按摩观 | 欧美好吊妞视频| 美女露胸一区二区三区| 亚洲福利视频在线| 亚洲高清激情| 欧美—级在线免费片| 一区二区av在线| 中国女人久久久| 国产伦精品一区二区三区免费| 欧美在线观看你懂的| 久久成人精品| 亚洲激情女人| 中文久久精品| 国产日韩在线亚洲字幕中文| 久久久久国产精品一区二区| 久久久免费精品| 亚洲九九爱视频| 在线中文字幕一区| 国内精品久久久久影院优| 牛牛精品成人免费视频| 欧美日韩精品一区二区三区| 欧美制服第一页| 麻豆久久婷婷| 亚洲特色特黄| 久久精品久久综合| 一本色道久久88亚洲综合88| 亚洲男人第一网站| 亚洲精品乱码久久久久| 亚洲欧美国产不卡| 亚洲人成在线播放| 欧美亚洲在线观看| 99在线观看免费视频精品观看| 亚洲欧美第一页| 99国产精品久久久久久久久久| 亚洲女爱视频在线| 99国产精品久久久久老师| 欧美在线91| 亚洲一区二区三区精品动漫| 久久只精品国产| 欧美一区免费视频| 欧美激情一区二区三区高清视频| 欧美在线观看日本一区| 欧美激情精品久久久久久变态| 欧美一区二视频| 欧美一级久久久| 亚洲一区二区四区| 亚洲麻豆av| 欧美在线观看www| 一区二区三区精品视频| 久久久久一区二区三区四区| aa国产精品| 久久人人97超碰精品888| 亚洲欧美卡通另类91av | 国产一区二区三区久久精品| 亚洲国产视频一区| 一区二区三区中文在线观看 | 午夜伦欧美伦电影理论片| 一本久久a久久精品亚洲| 久久影视精品| 久久裸体艺术| 国产日韩亚洲欧美精品| 一区二区三区成人| 一区二区三区国产在线观看| 欧美激情欧美狂野欧美精品| 欧美激情欧美激情在线五月| 怡红院精品视频| 欧美综合二区| 久久久久久久一区二区三区| 国产亚洲人成网站在线观看| 亚洲一区日韩| 午夜精品亚洲| 国产精品日韩| 亚洲专区国产精品| 香蕉亚洲视频| 国产亚洲精品高潮| 久久高清一区| 模特精品在线| 亚洲欧洲在线视频| 欧美成人有码| 最近中文字幕日韩精品| 日韩一级免费观看| 欧美性猛交xxxx乱大交蜜桃| 亚洲一区中文字幕在线观看| 欧美一区二区三区在线观看视频| 国产日韩欧美不卡在线| 久久久www成人免费精品| 女生裸体视频一区二区三区| 最新精品在线| 欧美色欧美亚洲另类二区| 亚洲图片欧美午夜| 久久视频一区二区| 亚洲国产99| 欧美国产日韩xxxxx| 日韩视频免费| 久久成人免费视频| 亚洲国产老妈| 欧美日韩激情小视频| 亚洲一区二区在线看| 久久噜噜噜精品国产亚洲综合| 亚洲国产精品高清久久久| 欧美日韩视频在线第一区| 亚洲欧美中文在线视频| 免费在线观看精品| 亚洲一区二区免费| 精品盗摄一区二区三区| 欧美日韩国产另类不卡| 亚洲在线日韩| 亚洲成人在线视频网站| 亚洲在线成人| 亚洲国产精品久久久| 国产精品高清网站| 欧美午夜免费影院| 狠狠色狠狠色综合系列| 久久久久久穴| 亚洲精品中文字幕女同| 久久精品国产亚洲aⅴ| 亚洲精品看片| 国产一区二区三区四区老人| 欧美激情麻豆| 久久成人久久爱| 亚洲美女在线看| 久久综合伊人| 香蕉视频成人在线观看| 99天天综合性| 亚洲国产成人av好男人在线观看| 国产精品美女在线| 欧美精品成人在线| 久久视频这里只有精品| 亚洲欧美国产毛片在线| 亚洲精品视频一区| 欧美国产综合视频| 久久色中文字幕| 先锋资源久久| 亚洲性图久久| 日韩视频精品| 亚洲国产视频直播| 在线不卡中文字幕| 国产一区二区你懂的| 国产精品免费一区二区三区在线观看|