• <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>

            huyutian

            他強由他強,清風(fēng)拂山崗;他橫由他橫,明月照大江。他自狠來他自惡,我自一口真氣足

              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
              20 隨筆 :: 47 文章 :: 22 評論 :: 0 Trackbacks
            Windows系統(tǒng)三種定時器的分析
            目前,Windows下的定時器編程主要有三種方式。
            1)SetTimer定時器是利用Windows窗口消息WM_TIMER來實現(xiàn)的。使用方法非常簡單,SetTimer創(chuàng)建定時器,KillTimer銷毀定時器。使用條件是調(diào)用線程必須要有窗口消息隊列message queue,因此如果是工作線程就無法使用這種方法。
            2)WaitableTimer定時器,其實應(yīng)該算是一種線程同步對象,CreateWaitableTimer創(chuàng)建定時器對象,SetWaitableTimer設(shè)置定時器回調(diào)函數(shù),CLoseHandle銷毀定時器。WaitableTimer可以跨線程、進程使用,只要知道定時器對象名字(創(chuàng)建定時器時設(shè)置)就可以控制該定時器對象了。WaitableTimer定時器的回調(diào)函數(shù)實際上是一個APC(Asynchronous Procedure Calls)異步過程調(diào)用函數(shù)。
            關(guān)于APC方面的知識可參考“談?wù)剬PC的一點理解”一文http://blog.csdn.net/wwwwly/archive/2009/07/10/4337907.aspx
            3)TimerQueueTimer定時器,應(yīng)該算迄今為止Windows系統(tǒng)最強大的定時器了。他可以支持多種工作模式,而且定時精度也是最高的。
            使用時,首先要調(diào)用CreateTimerQueue創(chuàng)建一個定時器隊列,然后用
            CreateTimerQueueTimer來創(chuàng)建一個TimerQueueTimer定時器,
            WT_EXECUTEDEFAULT,默認設(shè)置,回調(diào)函數(shù)將進入一個非I/O工作線程隊列
            WT_EXECUTEINTIMERTHREAD,回調(diào)函數(shù)作為APC,在定時器線程中被調(diào)用,被調(diào)用的條件是線程進入可警告等待狀態(tài)alertable wait status。僅適用于短時任務(wù),否則可能會影響隊列中的其他定時器。
            WT_EXECUTEINIOTHREAD,回調(diào)函數(shù)進入一個I/O工作線程隊列,
            請注意,大多數(shù)定時器都需要調(diào)用線程進入可警告等待狀態(tài)alertable wait status,并不是隨隨便便就能發(fā)生定時調(diào)用的。一個線程是否進入可警告等待狀態(tài)可參見微軟的說明http://msdn.microsoft.com/en-us/library/ms686307.aspx
            A thread goes into an alertable wait state by calling either SleepEx, MsgWaitForMultipleObjectsEx, WaitForSingleObjectEx, or WaitForMultipleObjectsEx, with the function's bAlertable parameter set to TRUE.
            所以希望定時器不受這種可警告等待狀態(tài)的影響,最好是用TimerQueue來完成。
            posted on 2011-06-29 10:46 胡雨田 閱讀(12750) 評論(2)  編輯 收藏 引用 所屬分類: 編程技巧

            評論

            # re: Windows系統(tǒng)三種定時器的分析 2016-07-15 18:32 Apophis
            不是三種,還有另兩種高精度定時器,其中一種是 timerSetEvent,不過一個進程中它只支持創(chuàng)建16個,還有一個是 mci 的定時器  回復(fù)  更多評論
              

            # re: Windows系統(tǒng)三種定時器的分析 2016-07-15 18:37 Apophis
            另外,TimerQueueTimer 使用中最需注意的密集的短時調(diào)用,一定仔細區(qū)分每個定時器需求,來準確使用WT_*控制其創(chuàng)建線程的情況,如果使用默認標(biāo)記或APC形式時,理論上只要能成果創(chuàng)建線程它一定創(chuàng)建線程,最終可能創(chuàng)建出幾百個線程,反而拖慢程序運行(因為它其后還有消除線程的動作,如果當(dāng)時線程數(shù)奇多,它在執(zhí)行這個過程時會讓表層程序莫名其妙的卡頓)  回復(fù)  更多評論
              

            久久久久亚洲AV无码专区网站| 国产精品亚洲综合专区片高清久久久 | 久久精品无码午夜福利理论片| 久久久精品国产sm调教网站| 国产精品久久久久久久| 久久精品国产欧美日韩| 狠狠色综合网站久久久久久久高清| 久久91精品国产91久久小草| 久久夜色精品国产www| 久久夜色精品国产欧美乱| 精品99久久aaa一级毛片| 久久人爽人人爽人人片AV| 欧美国产精品久久高清| 久久本道伊人久久| 国产精品国色综合久久| 日本精品一区二区久久久| 国产亚洲欧美成人久久片| 亚洲狠狠婷婷综合久久久久| 狠狠久久综合| 色成年激情久久综合| 久久午夜无码鲁丝片| 中文字幕精品久久久久人妻| 九九久久精品无码专区| 中文精品久久久久国产网址| 久久精品亚洲中文字幕无码麻豆 | 亚洲精品NV久久久久久久久久| 成人久久精品一区二区三区| 久久这里只有精品18| 国产成人精品综合久久久久| 亚洲国产精品综合久久一线| 免费观看久久精彩视频| 国内精品久久国产大陆| 国产精品久久久久天天影视| 久久66热人妻偷产精品9| 国内精品久久久久影院优| 精品久久久久中文字幕日本| 久久精品国产久精国产思思| 久久精品国产亚洲AV电影| 777米奇久久最新地址| 久久精品男人影院| 久久久不卡国产精品一区二区|