windowsapi函数库:Windows API一日一练(66)CreateWaitableTimer和SetWaitableTimer函数

  用户感觉到软件Software好用就是可以定时地做些工作而不需要人参和进去比如每天定时地升级病毒库定时地下载电影定时地更新游戏里人物要想实现这些功能就可以使用定时器APICreateWaitableTimer和SetWaitableTimer来实现了这对API创建时钟是比较精确可以达到100倍10亿分的

  CreateWaitableTimer和SetWaitableTimer声明如下:

WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerA(
    __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
    __in     BOOL bManualRe,
    __in_opt LPCSTR lpTimerName
    );
WINBASEAPI
__out
HANDLE
WINAPI
CreateWaitableTimerW(
    __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,
    __in     BOOL bManualRe,
    __in_opt LPCWSTR lpTimerName
    );
#def UNICODE
# CreateWaitableTimer CreateWaitableTimerW
#
# CreateWaitableTimer CreateWaitableTimerA
#end // !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是设置定时器属性

  bManualRe是是否手动复位

  lpTimerName是定时器名称

  hTimer是定时器句柄

  lpDueTime是设置定时器时间间隔当设置为正值是绝对时间;当设置为负数是相对时间

  lPeriod是周期

  pfnCompletionRoutine是设置回调

  lpArgToCompletionRoutine是传送给回调参数

  fResume是设置系统是否自动恢复

  例子如下:

#001 //创建定时器
#002  //蔡军生 2007/11/06 QQ:9073204 深圳
#003   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          (!hTimer)
#014         {              
#015                1;
#016         }
#017 
#018         OutputDebugString(_T("10秒定时器\r\n"));
#019 
#020         // 设置10秒钟
#021         (!SetWaitableTimer(hTimer, &liDueTime, 0, NULL, NULL, 0))
#022         {        
#023               //
#024               CloseHandle(hTimer);
#025                2;
#026         }
#027 
#028         //等定时器有信号
#029          (WaitForSingleObject(hTimer, INFINITE) != WAIT_OBJECT_0)
#030         {
#031               OutputDebugString(_T("10秒定时器出错了\r\n"));   
#032               //
#033               CloseHandle(hTimer);
#034                3;
#035         }
#036         
#037         {
#038               //10秒钟到达
#039               OutputDebugString(_T("10秒定时器到了\r\n"));            
#040         }
#041 
#042         //
#043         CloseHandle(hTimer);
#044          0;
#045  }


Tags:  api函数 setwaitabletimer windowsapi函数 windowsapi函数库

延伸阅读

最新评论

发表评论