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

小步慢跑

 

基于 TimerQueue 的定時器封裝類

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

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

   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:會導(dǎo)致DeleteTimerQueueEx等待所有的timer對應(yīng)的回調(diào)方法完成后再返回
  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:     //之前定義的處理函數(shù)即將被調(diào)用或正在被調(diào)用,立刻返回,但系統(tǒng)會在處理函數(shù)調(diào)用完成后自動刪除這個定時器
  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: }

調(diào)用代碼:

   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

導(dǎo)航

統(tǒng)計(jì)

常用鏈接

留言簿

隨筆分類(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>
            亚洲天天影视| 亚洲综合精品| 久久aⅴ国产紧身牛仔裤| 久久久99免费视频| 樱花yy私人影院亚洲| 久久综合激情| 亚洲作爱视频| 久久国产精品毛片| 亚洲国产日韩欧美在线图片 | aa级大片欧美三级| 欧美一级精品大片| 亚洲国产精品悠悠久久琪琪| 欧美日韩国产电影| 欧美诱惑福利视频| 亚洲精品在线一区二区| 久久久一本精品99久久精品66| 亚洲精品久久久久中文字幕欢迎你 | 欧美激情性爽国产精品17p| 一区二区三区久久精品| 国产自产精品| 国产精品久99| 欧美大色视频| 久久av资源网站| 日韩一级在线观看| 农夫在线精品视频免费观看| 午夜精品久久久久| 亚洲美女av电影| 一区二区三区在线视频播放| 国产精品久久久久久av下载红粉 | 麻豆视频一区二区| 亚洲欧美中日韩| 伊人夜夜躁av伊人久久| 欧美久色视频| 99re亚洲国产精品| 免费观看在线综合| 欧美一级理论片| 在线亚洲欧美专区二区| 亚洲国产影院| 狠狠综合久久av一区二区小说| 欧美午夜不卡影院在线观看完整版免费| 久久久福利视频| 香蕉乱码成人久久天堂爱免费 | 国产精品亚洲综合久久| 欧美日韩视频一区二区| 母乳一区在线观看| 毛片基地黄久久久久久天堂| 欧美在线在线| 午夜视频一区二区| 亚洲综合社区| 亚洲一区免费视频| 欧美男人的天堂| 欧美在线免费视屏| 亚洲综合日本| 中日韩午夜理伦电影免费| 亚洲欧洲综合另类| 久久青青草综合| 久久精品女人的天堂av| 欧美在线亚洲在线| 一区二区三区中文在线观看| 国产人成一区二区三区影院| 国产精品乱码| 国产精品欧美一区二区三区奶水 | 国产一区二区高清不卡| 国产精品日韩久久久| 国产精品久久久一区二区| 国产精品白丝av嫩草影院| 欧美午夜精品久久久久久孕妇| 欧美日韩午夜视频在线观看| 欧美日韩视频第一区| 国产精品高潮久久| 国产精品欧美一区喷水| 国产精品一区二区久久久久| 国产日韩欧美三区| 红桃视频欧美| 亚洲国产精品一区制服丝袜 | 午夜精品视频网站| 欧美一区2区三区4区公司二百| 先锋影音网一区二区| 欧美一区二区国产| 久久精品亚洲精品国产欧美kt∨| 久久久精品一品道一区| 免费成人在线观看视频| 欧美精品97| 国产精品videosex极品| 国产精品无码永久免费888| 国产一区91精品张津瑜| 狠狠综合久久av一区二区老牛| 亚洲二区在线| 99精品国产一区二区青青牛奶| 亚洲视频一区| 久久成人综合网| 欧美v亚洲v综合ⅴ国产v| 亚洲国产婷婷综合在线精品 | 欧美激情精品久久久久| 欧美日韩和欧美的一区二区| 国产精品青草久久久久福利99| 国产亚洲一本大道中文在线| 亚洲人成在线播放网站岛国| 亚洲午夜久久久久久尤物| 欧美一区精品| 欧美国产先锋| 中文日韩欧美| 久久尤物视频| 国产精品久久久999| 精品91久久久久| 一本色道久久综合狠狠躁篇的优点| 午夜精品福利一区二区蜜股av| 久久影院午夜论| 99re66热这里只有精品4| 欧美在线啊v一区| 欧美精品久久99| 国产一区二区激情| 一本色道久久综合亚洲精品小说| 久久aⅴ国产紧身牛仔裤| 亚洲国产1区| 性欧美1819性猛交| 欧美激情bt| 国内自拍一区| 亚洲一区尤物| 欧美激情成人在线| 亚洲欧美在线播放| 欧美人与性动交a欧美精品| 国产主播在线一区| 亚洲永久免费av| 亚洲电影激情视频网站| 羞羞漫画18久久大片| 欧美日韩国产免费| 亚洲黄色成人| 亚洲欧美www| 欧美国产日韩一区二区| 国产亚洲激情视频在线| 亚洲午夜日本在线观看| 亚洲成色777777女色窝| 嫩草国产精品入口| 亚洲一卡久久| 欧美日本一区二区视频在线观看| 伊人成人网在线看| 久久国产加勒比精品无码| 一本久道久久综合狠狠爱| 你懂的亚洲视频| 伊人精品视频| 久久久999国产| 亚洲专区一二三| 国产精品啊啊啊| 日韩亚洲欧美一区| 欧美国产日韩亚洲一区| 久久精视频免费在线久久完整在线看| 国产精品久久久对白| 一区二区三区精品视频| 欧美激情一区二区三区蜜桃视频| 久久电影一区| 国产午夜精品美女毛片视频| 午夜免费电影一区在线观看| 99视频超级精品| 欧美精品激情在线观看| 亚洲精品影院| 亚洲国产裸拍裸体视频在线观看乱了中文 | 欧美国产欧美综合| 91久久精品国产91性色| 欧美xart系列在线观看| 久久久久久久久久久成人| 国产一二精品视频| 久久久久在线观看| 久久高清福利视频| 激情校园亚洲| 美国十次了思思久久精品导航| 久久九九电影| 亚洲国产成人porn| 欧美二区在线播放| 欧美成人日韩| 一本色道久久综合亚洲精品小说 | 欧美在线欧美在线| 亚洲欧美日韩综合国产aⅴ| 国产精品视频网址| 久久疯狂做爰流白浆xx| 欧美在线啊v| 亚洲成人在线免费| 欧美激情一区二区三级高清视频| 久久视频在线免费观看| 亚洲狠狠婷婷| 亚洲精品视频在线看| 欧美天堂亚洲电影院在线观看 | 久久激情视频| 亚洲二区视频在线| 亚洲欧洲日本一区二区三区| 欧美成人综合网站| 国产精品99久久久久久久女警 | 久久综合九色99| 久久亚洲影音av资源网| 亚洲精品日本| 在线亚洲欧美视频| 国产亚洲二区| 欧美激情视频一区二区三区不卡| 欧美精品一区二区三区在线看午夜 | 免费av成人在线| 欧美成人dvd在线视频| 一区二区久久久久久| 亚洲欧美日韩久久精品| 在线免费观看视频一区| 亚洲精品社区|