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

小步慢跑

 

基于 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>
            激情亚洲网站| 亚洲欧洲精品一区二区| 久久久久久91香蕉国产| 国产一区免费视频| 久久国产婷婷国产香蕉| 国产日韩欧美亚洲| 亚洲精品四区| 欧美日韩免费观看一区二区三区| 亚洲乱码国产乱码精品精可以看| 性欧美在线看片a免费观看| 久久精品一本久久99精品| 欧美日韩国产精品成人| 亚洲欧美日韩另类| 裸体一区二区| 亚洲国产精品传媒在线观看 | 欧美国产91| 久久国产欧美日韩精品| 免费在线看一区| 亚洲第一精品影视| 亚洲国产精品123| 一区二区精品在线观看| 亚洲一区三区电影在线观看| 欧美中文字幕在线| 欧美大片在线看免费观看| 欧美视频中文字幕在线| 黄色成人av在线| 99国产精品久久久久久久久久 | 亚洲国产影院| 亚洲一级一区| 欧美韩日精品| 亚洲一区在线看| 欧美成人一区二区| 国产精品色一区二区三区| 亚洲大片av| 午夜国产精品视频| 欧美国产一区二区| 香港成人在线视频| 欧美成人日韩| 黄色精品免费| 欧美在线国产精品| 9色porny自拍视频一区二区| 亚洲欧美bt| 欧美日韩一二三区| 久久久综合激的五月天| 韩国成人福利片在线播放| 国产主播一区二区三区四区| 99香蕉国产精品偷在线观看| 久久精品日韩欧美| 国产精品99久久久久久久久久久久| 久久九九国产精品怡红院| 国产精品国产三级国产普通话三级| 亚洲电影免费观看高清完整版在线观看 | 久久久亚洲一区| 国产伦精品一区二区| 亚洲乱码国产乱码精品精98午夜| 久久综合影音| 欧美一级视频免费在线观看| 国产精品www.| 亚洲影音一区| 亚洲视频中文| 国产精品magnet| 亚洲一区国产视频| 99成人在线| 欧美系列精品| 香蕉久久夜色精品| 午夜欧美大片免费观看| 国产综合av| 久久婷婷丁香| 美女日韩欧美| avtt综合网| 亚洲免费成人av| 国产精品成人在线观看| 亚洲欧美日韩专区| 欧美一级播放| 亚洲国产精品精华液网站| 亚洲国产另类精品专区| 欧美日韩色婷婷| 亚洲综合第一| 久久成人在线| 欲香欲色天天天综合和网| 欧美国产1区2区| 欧美视频在线观看免费网址| 性久久久久久| 久久夜色精品国产噜噜av| 亚洲精品四区| 亚洲综合丁香| 永久久久久久| 亚洲卡通欧美制服中文| 国产人成精品一区二区三| 久久综合狠狠综合久久激情| 欧美国产第一页| 香蕉成人久久| 欧美电影免费观看高清完整版| 一本色道综合亚洲| 久久国产毛片| 99re8这里有精品热视频免费| 一区二区三区高清在线观看| 中文久久精品| 亚洲高清不卡av| 国产精品成人在线观看| 美女视频网站黄色亚洲| 欧美日韩系列| 牛人盗摄一区二区三区视频| 欧美日韩免费观看一区二区三区| 欧美一进一出视频| 欧美看片网站| 免费高清在线一区| 国产精品私拍pans大尺度在线| 老司机精品视频一区二区三区| 欧美日韩国产区一| 男女精品视频| 国产日韩欧美麻豆| 日韩午夜免费视频| 亚洲第一二三四五区| 亚洲男人天堂2024| 一本久久a久久免费精品不卡| 久久久精品国产免费观看同学| 亚洲一区在线播放| 欧美激情视频给我| 免费成人在线观看视频| 国产亚洲欧美一区在线观看| av成人天堂| 99热精品在线观看| 欧美成人精品高清在线播放| 久久久久久尹人网香蕉| 国产精品剧情在线亚洲| 日韩亚洲不卡在线| 亚洲精品中文字幕女同| 久久久久久国产精品一区| 久久9热精品视频| 国产精品久久久久三级| 一本大道av伊人久久综合| 日韩一本二本av| 欧美成人高清视频| 欧美黄色aaaa| 亚洲国产乱码最新视频| 久久久久久久综合| 老司机午夜精品视频| 永久久久久久| 久久男人资源视频| 亚洲成人在线网| 亚洲伦理在线观看| 欧美精品福利| 亚洲精选在线| 亚洲在线视频免费观看| 国产精品毛片大码女人| 亚洲图色在线| 久久av一区| 黄色另类av| 美日韩精品视频免费看| 亚洲国产精品综合| 亚洲色图自拍| 国产精品影音先锋| 久久久www| 亚洲青涩在线| 亚洲一区欧美| 国产亚洲欧美激情| 久久免费黄色| 亚洲高清久久久| 亚洲一区二区三区影院| 国产乱码精品一区二区三区不卡| 午夜精品亚洲| 麻豆精品传媒视频| 一区二区三区三区在线| 国产精品久久久久久久久久三级| 一区二区在线不卡| 亚洲精品乱码久久久久久黑人| 欧美国产精品专区| 日韩视频一区二区| 午夜在线一区二区| 激情五月婷婷综合| 欧美韩日视频| 亚洲资源av| 欧美刺激午夜性久久久久久久| 亚洲久久成人| 国产精品一区二区在线观看网站| 久久精品日产第一区二区| 亚洲高清久久久| 午夜老司机精品| 亚洲高清在线播放| 国产精品国产三级国产专播品爱网 | 欧美日韩一区在线| 性感少妇一区| 亚洲国产一区二区视频| 欧美一区二区视频97| 亚洲黄色一区| 国产欧美日韩视频在线观看| 欧美黄在线观看| 久久国产精品72免费观看| 亚洲欧洲日本国产| 久热综合在线亚洲精品| 亚洲一区免费在线观看| 91久久综合| 国产麻豆精品theporn| 欧美xxx在线观看| 欧美呦呦网站| 亚洲一区二区三区四区视频| 亚洲激精日韩激精欧美精品| 久久综合久久综合这里只有精品| 亚洲永久视频|