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

小步慢跑

 

基于 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 閱讀(1050) 評論(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>
            欧美在线视频导航| 欧美成人精品一区二区| 亚洲伊人观看| 久久久蜜桃精品| 99视频一区二区| 另类尿喷潮videofree | 欧美在线免费观看亚洲| 欧美激情精品久久久久| 久久综合福利| 一区二区三区视频在线播放| 午夜精品www| 欧美日韩一区高清| 亚洲国产午夜| 欧美成人激情视频| 狼人社综合社区| 尤物在线精品| 美腿丝袜亚洲色图| 久久性天堂网| 亚洲精品一区二区三区四区高清| 欧美日韩专区在线| 亚洲深夜激情| 亚洲精品视频一区二区三区| 国产精品a级| 性色av香蕉一区二区| 久久天天躁夜夜躁狠狠躁2022| 一区二区三区日韩欧美精品| 国产一区二区三区直播精品电影 | 中文高清一区| 久久久久久亚洲综合影院红桃| 中文久久精品| 亚洲黄网站在线观看| 黄色一区二区在线| 亚洲大片精品永久免费| 久久国产乱子精品免费女 | 久久久在线视频| 一区二区高清视频| 亚洲国产婷婷香蕉久久久久久| 欧美在线视频播放| 亚洲第一主播视频| 久久久www成人免费毛片麻豆| 欧美在线观看一区| 亚洲激情成人网| 亚洲免费影视| 一区二区激情视频| 男男成人高潮片免费网站| 亚洲综合另类| 久久riav二区三区| 99这里只有精品| 久久成人精品视频| 欧美一级一区| 欧美另类极品videosbest最新版本 | 国产欧美日韩一区二区三区| 久久频这里精品99香蕉| 国产精品高潮呻吟久久av无限| 欧美激情免费观看| 国产精品福利网| 香蕉成人久久| 免费观看日韩av| 亚洲欧洲日韩女同| 国产精品自拍在线| 国产亚洲一区二区三区| 欧美一区二区三区视频| 久久综合伊人77777| 欧美日韩国产精品成人| 国产精品―色哟哟| 亚洲精品综合久久中文字幕| 1024亚洲| 欧美日韩国产黄| 在线亚洲成人| 欧美va天堂在线| 一本色道久久综合| 亚洲精品国产精品国自产观看| 久久精品最新地址| 久久久国产午夜精品| 免费亚洲电影在线| 亚洲毛片av在线| 欧美日韩高清在线观看| 免费欧美在线| 欧美a级片网| 免费在线欧美视频| 久久久久久精| 91久久久久久| 国产精品久久久久高潮| 日韩一级大片在线| 伊人久久噜噜噜躁狠狠躁| 亚洲高清视频一区| 欧美成人一二三| 亚洲精品日产精品乱码不卡| 亚洲肉体裸体xxxx137| 精品1区2区3区4区| 国产精品草草| 久久综合五月| 久久国产福利| 亚洲伊人伊色伊影伊综合网 | 国产精品劲爆视频| 国产一区二区三区在线观看视频| 一卡二卡3卡四卡高清精品视频| 亚洲精品人人| 男女激情久久| 亚洲国产精品久久91精品| 1000部国产精品成人观看| 久久精品欧美日韩精品| 久久综合国产精品| 伊人狠狠色丁香综合尤物| 久久久久久69| 欧美激情网站在线观看| 免费在线日韩av| 亚洲高清二区| 亚洲国产三级| 中国av一区| 亚洲欧美韩国| 久久欧美中文字幕| 美女性感视频久久久| 在线日韩欧美| 亚洲激情视频| 99精品久久免费看蜜臀剧情介绍| 欧美激情一区二区三区在线视频观看 | 麻豆国产精品777777在线| 欧美高清在线一区| 一区二区三区久久精品| 国产精品亚洲片夜色在线| 久久福利精品| 亚洲激情婷婷| 午夜精品久久久久久久| 伊人久久久大香线蕉综合直播 | 亚洲一级免费视频| 国产亚洲一区二区精品| 欧美大尺度在线观看| 亚洲调教视频在线观看| 美女视频黄 久久| 一区二区国产精品| 国产一区在线播放| 欧美极品影院| 欧美一级在线播放| 91久久精品国产91久久性色tv | 午夜精品久久久久久久久久久| 国产在线播放一区二区三区| 欧美精品自拍偷拍动漫精品| 性欧美大战久久久久久久久| 亚洲经典在线| 久久免费的精品国产v∧| 一本色道久久综合精品竹菊 | 欧美成人激情视频| 欧美一区2区视频在线观看| 亚洲看片一区| 在线播放日韩专区| 国产精品亚洲视频| 欧美日韩一区二区三区四区五区| 久久精品91久久香蕉加勒比| 中文网丁香综合网| 亚洲国产精品成人一区二区| 久久精品欧美日韩| 亚洲在线1234| 日韩视频中午一区| 亚洲激情影视| 在线观看成人一级片| 国产午夜亚洲精品不卡| 国产精品国产三级国产专播品爱网 | 久久国产视频网站| 亚洲永久在线| 欧美国产亚洲视频| 一区二区视频欧美| 亚洲日本欧美日韩高观看| 久久久国产精品一区| 亚洲一区二区三区久久| 亚洲日韩欧美视频一区| 一区精品久久| 黄色综合网站| 红桃视频国产精品| 国产一区视频观看| 狠狠综合久久av一区二区小说| 国产乱肥老妇国产一区二| 国产精品国产三级国产aⅴ无密码| 欧美激情影音先锋| 欧美激情网友自拍| 欧美黄色一区| 欧美精品日韩www.p站| 欧美另类极品videosbest最新版本| 欧美精品不卡| 国产精品hd| 国产精品午夜在线| 国产欧美一区二区白浆黑人| 国产日韩欧美在线播放| 国内精品久久久久久久影视麻豆| 狠狠色综合播放一区二区| 激情综合中文娱乐网| 亚洲盗摄视频| 亚洲精品视频在线| 一区二区三区视频免费在线观看| 一区二区欧美亚洲| 欧美一区二区在线看| 久久中文字幕一区| 亚洲国产一区二区三区a毛片| 亚洲理伦在线| 亚洲欧美日韩在线不卡| 久久精品夜色噜噜亚洲a∨| 蜜臀99久久精品久久久久久软件| 欧美精品 国产精品| 国产精品毛片| 黑人巨大精品欧美一区二区|