优秀案例News CREATE A CENTURY BRAND OF BISHAN

您现在的位置:主页 > 优秀案例 >

调用函数的例子如下: #001 //创建定时器 #002 //蔡军生 2007/11/06 QQ:9073204 深圳

2019-01-07 09:09

__in BOOL bManualReset, liDueTime。

所以此线程必须将必须其自身置于监听状态, #021 if (!SetWaitableTimer(hTimer。

GetLastError() ); MessageBox( NULL,若是值是负的,定时地下载片子,若是实体到场到APC队列的速率比处置的更快的话, __in_opt LPCWSTR lpTimerName ); #ifdef UNICODE #define CreateWaitableTimer CreateWaitableTimerW #else #define CreateWaitableTimer CreateWaitableTimerA #endif // !UNICODE WINBASEAPI BOOL WINAPI SetWaitableTimer( __in HANDLE hTimer,Sleep()就会唤醒此线程,若等待前提餍足的是APC队列中的一个实体。

无论是通过CreateWaitableTimer() 仍是通过OpenWaitableTimer()得到的句柄, 定时的时间通过调用SetWaitableTimer()来设置,若是等待定时器的句柄的话, 函数CreateWaitableTimer和SetWaitableTimer声明如下: WINBASEAPI __out HANDLE WINAPI CreateWaitableTimerA( __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,千赢国际平台,// When timer will become signaled 2000, CreateWaitableTimer failed with Error %d.,就是可以定时地做一些事情。

2、当利用APC来实现定时器时,定时器将在每5秒被引发一次。

若定时器已经存在。

好比每天定时地升级病毒库, __in LONG lPeriod,以确保声明切合的定时器原型函数,这时线程将不再处于监听状态,代表一个特定的时刻, pfnCompletionRoutine是设置回调函数, 0);//将hTimer信息重置为无信号,超时, TRUE,然后调用响应的完全例程,// Handle to the timer object liDueTime, SetWaitableTimer failed with Error / %d.,本文的例子代码显示了若何实现。

当设置为正值是绝对时间;当设置为负数是相对时间,在不必要定 时器时必须开释, szError, GetLastError() ); MessageBox( NULL, lpArgToCompletionRoutine是传送给回调函数的参数, NULL。

可以设置为一个特定的时刻(如December 16,就可以利用定时器的API函数CreateWaitableTimer和SetWaitableTimer来实现了,// Argument to the completion routine FALSE );// Do not restore a suspended system if ( bSuccess ) { for ( ; MyData.dwValue 1000; MyData.dwValue += 100 ) { SleepEx( INFINITE,本例设置周期为两秒的定时器, Error,转载请标明来由: 通过异步法式调用(APC)实现的定时功效 编译:张海粟 定时器是一个在特定时间或者法例间隔被引发的内查对象, NULL,你就可以将APC与其连系起来,要想实现这些功效,激活句柄等。

出格当定时等待的时间比起要求执行完全例程的时间更短的话,可以调用下面的任何一个监听函数来完成监听状态的设置: SleepEx(); WaitForSingleObjectEx(); WaitForMultipleObjectsEx(); MsgWaitForMultipleObjectsEx(); SignalObjectAndWait(); 任何一个线程都有一个APC队列, Error,而且此常量应该在包之前界说, __in_opt LPCSTR lpTimerName ); WINBASEAPI __out HANDLE WINAPI CreateWaitableTimerW( __in_opt LPSECURITY_ATTRIBUTES lpTimerAttributes,取而代之要做的是将实体从APC队列中取出,而不必要人参与进去, MB_ICONEXCLAMATION ); } } __finally { CloseHandle( hTimer ); } } else { wsprintf( szError,这个值应该合适在布局体FILETIME中描述的款式, MB_ICONEXCLAMATION ); } } 摘自:?id=1587 。

// Periodic timer interval of 2 seconds TimerAPCProc, 0,若是线程的APC队列中有实体,则唤起这个线程的原因是定时器被激活,而且执行完全例程,完全例程的地点作为SetWaitableTimer()的第四个参数。

那么线程将会被挂起,在CreateWaitableTimer()的第二个参数通报FALSE可以发生一个自动归零的定时器, liDueTime,以及在调用MsgWaitForMultipleObjectsEx()情况下,餍足等待前提的有:一个实体到场到APC队列中,这对API函数成立的时钟是比较切确的, 利用本定时器时,函数SetWaitableTime()定时的时间参数要求LARGE_INTEGER类型。

NULL,连系定时器的异步法式调用可以允许回调函数在任何定时器被引发的时候执行,要执行一个完全例程则线程必须处于监听状态,设置定时的线程不应该等待定时器的句柄。

szError,// Create auto-reset timer MyTimer ) )// Name of waitable timer { __try { // Create an integer that will be used to signal the timer // 5 seconds from now. qwDueTime = -5 * _SECOND; // Copy the relative time into a LARGE_INTEGER. liDueTime.LowPart = (DWORD) ( qwDueTime 0xFFFFFFFF ); liDueTime.HighPart = (LONG) ( qwDueTime 32 ); bSuccess = SetWaitableTimer( hTimer,要领是利用函数CloseHandle()。

直至等待前提餍足为止,则此线程不会进入休眠状态,要领是向SetWaitableTimer()的第三个参数通报一个周期参数(以毫秒为单位),可以到达100倍的10亿分之一秒,后面的示例代码中利用的是相对时间, hTimer是定时器的句柄。

__in const LARGE_INTEGER *lpDueTime。

__in_opt PTIMERAPCROUTINE pfnCompletionRoutine,完全例程将老是被调用SetWaitableTimer()的相同的线程执行,一个监视函数仅仅在处置完所有APC实体后才返回,

上一篇:这里表示60 分钟后自动关机

下一篇:19课:单片机定时器、中断试验