CreateWaitableTimer和SetWaitableTimer函數

 用戶感覺到軟件的好用,就是可以定時地做一些工作,而不需要人蔘與進去。比如每天定時地升級病毒庫,定時地下載電影,定時地更新遊戲裏的人物。要想實現這些功能,就可以使用定時器的API函數CreateWaitableTimer和SetWaitableTimer來實現了,這對API函數創建的時鐘是比較精確的,可以達到100倍的10億分之一秒。
 
函數CreateWaitableTimer和SetWaitableTimer聲明如下:
 
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerA(
    __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
    __in     BOOL bManualReset,
    __in_opt LPCSTR lpTimerName
    );
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerW(
    __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
    __in     BOOL bManualReset,
    __in_opt LPCWSTR lpTimerName
    );
#ifdef UNICODE
#define CreateWaitableTimer CreateWaitableTimerW
#else
#define CreateWaitableTimer CreateWaitableTimerA
#endif // !UNICODE
 
 
WINBASEAPI
BOOL
WINAPI
SetWaitableTimer(
    __in     HANDLE hTimer,
    __in     const LARGE_INTEGER *lpDueTime,
    __in     LONG lPeriod,
    __in_opt PTIMERAPCROUTINE pfnCompletionRoutine,
    __in_opt LPVOID lpArgToCompletionRoutine,
    __in     BOOL fResume
    );
 
lpTimerAttributes是設置定時器的屬性。
bManualReset是是否手動復位。
lpTimerName是定時器的名稱。
hTimer是定時器的句柄。
lpDueTime是設置定時器時間間隔,當設置爲正值是絕對時間;當設置爲負數是相對時間。
lPeriod是週期。
pfnCompletionRoutine是設置回調函數。
lpArgToCompletionRoutine是傳送給回調函數的參數。
fResume是設置系統是否自動恢復。
 
調用函數的例子如下:
#001 //創建定時器
#002  //蔡軍生 2007/11/06 QQ:9073204 深圳
#003  int CreateTestTimer(void)
#004  {
#005         HANDLE hTimer = NULL;
#006         LARGE_INTEGER liDueTime;
#007
#008         //設置相對時間爲10秒。
#009         liDueTime.QuadPart = -100000000;
#010
#011         //創建定時器。
#012        hTimer = CreateWaitableTimer(NULL, TRUE, _T("TestWaitableTimer"));
#013         if (!hTimer)
#014         {              
#015               return 1;
#016         }
#017
#018         OutputDebugString(_T("10秒定時器/r/n"));
#019
#020         // 設置10秒鐘。
#021        if (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
#022         {        
#023               //
#024               CloseHandle(hTimer);
#025               return 2;
#026         }
#027
#028         //等定時器有信號。
#029         if (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
#030         {
#031               OutputDebugString(_T("10秒定時器出錯了/r/n"));   
#032               //
#033               CloseHandle(hTimer);
#034               return 3;
#035         }
#036         else
#037         {
#038               //10秒鐘到達。
#039               OutputDebugString(_T("10秒定時器到了/r/n"));            
#040         }
#041
#042         //
#043         CloseHandle(hTimer);
#044         return 0;
#045  }

 


文章出處:http://www.diybl.com/course/3_program/vc/vc_js/2008422/110893.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章