通過非同步程式調用(APC)實現的定時功能

來源:互聯網
上載者:User

定時器是一個在特定時間或者規則間隔被激發的核心對象。結合定時器的非同步程式調用可 以允許回呼函數在任何定時器被激發的時候執行。本文的例子代碼顯示了如何?。

使用本定時器時,你需要把常量_WIN32_WINNT定義為0x0400,並且此常量應該在包之前定義 ,以確保聲明合適的定時器原型函數。

通過調用CreateWaitableTimer()可以建立一 個定時器,此函數返回一個指向核心對象的控制代碼。若定時器已經存在,你可以通過使用 OpenWaitableTimer()獲得一個進程相關的控制代碼。無論是通過CreateWaitableTimer() 還是通 過OpenWaitableTimer()獲得的控制代碼,在不需要定 時器時必須釋放,方法是使用函數 CloseHandle()。

定時的時間通過調用SetWaitableTimer()來設定,可以設定為一個 特定的時刻(如December 16, 1999 at 9:45 PM)或者一個相對的時間(如從現在起每五分 鐘)。函數SetWaitableTime()定時的時間參數要求LARGE_INTEGER類型。這個值應該符合在 結構體FILETIME中描述的格式。如果值是正的,代表一個特定的時刻。如果值是負的,代表 以100納秒為單位的相對時間。後面的範例程式碼中使用的是相對時間。在調用 SetWaitableTimer()函數後,定時器將在每5秒被激發一次。

你也可以將定時器設定 為周期性的自我激發,方法是向SetWaitableTimer()的第三個參數傳遞一個周期參數(以毫 秒為單位)。在CreateWaitableTimer()的第二個參數傳遞FALSE可以產生一個自動歸零的定 時器。本例設定周期為兩秒的定時器。

當設定了定時器之後,你就可以將APC與其結 合起來。這裡把APC函數稱作完全常式。完全常式的地址作為SetWaitableTimer()的第四個參 數。第五個參數是一個空類型的指標,你可以使用它來傳遞完全常式的參數。

在所有 的APC中,要執行一個完全常式則線程必須處於監聽狀態。完全常式將總是被調用 SetWaitableTimer()的相同的線程執行,所以此線程必須將必須其自身置於監聽狀態。可以 調用下面的任何一個監聽函數來完成監聽狀態的設定:

SleepEx();

WaitForSingleObjectEx();

WaitForMultipleObjectsEx();

MsgWaitForMultipleObjectsEx();

SignalObjectAndWait();

任何一個線程都有一個APC隊列。在調用上面的任何一個函數時,如果線程的APC隊列中有 實體,則此線程不會進入休眠狀態,取而代之要做的是將實體從APC隊列中取出,然後調用相 應的完全常式。

如果在APC隊列中不存在實體,那麼線程將會被掛起,直至等待條件 滿足為止。滿足等待條件的有:一個實體加入到APC隊列中,逾時,啟用控制代碼等,以及在調用 MsgWaitForMultipleObjectsEx()情況下,一個訊息進入到線程的一個訊息佇列中。若等待條 件滿足的是APC隊列中的一個實體,那麼線程會被啟用,並且執行完全常式,這種情況下的函 數的傳回值是 WAIT_IO_COMPLETION.

【重要提示】

1、在執行完一個完全常式 之後,系統會檢查在APC中剩下的實體以處理。一個監視函數僅僅在處理完所有APC實體後才 返回。因此,如果實體加入到APC隊列的速度比處理的更快的話,則調用這些函數可能永遠也 不能返回。特別當定時等待的時間比起要求執行完全常式的時間更短的話,這種情況更容易 發生。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.