mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
54 lines
960 B
C
54 lines
960 B
C
|
|
||
|
#include <windows.h>
|
||
|
#include <stdio.h>
|
||
|
|
||
|
VOID CALLBACK TimerApcProc(
|
||
|
LPVOID lpArg,
|
||
|
DWORD dwTimerLowValue,
|
||
|
DWORD dwTimerHighValue )
|
||
|
{
|
||
|
printf("APC Callback %lu\n", *(PDWORD)lpArg);
|
||
|
}
|
||
|
|
||
|
|
||
|
int main()
|
||
|
{
|
||
|
HANDLE hTimer;
|
||
|
BOOL bSuccess;
|
||
|
LARGE_INTEGER DueTime;
|
||
|
DWORD value = 1;
|
||
|
|
||
|
hTimer = CreateWaitableTimer(NULL, FALSE, NULL );
|
||
|
|
||
|
if (!hTimer)
|
||
|
{
|
||
|
printf("CreateWaitableTimer failed!\n");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
DueTime.QuadPart = -(LONGLONG)(5 * 10000000);
|
||
|
|
||
|
bSuccess = SetWaitableTimer(
|
||
|
hTimer,
|
||
|
&DueTime,
|
||
|
2001 /*interval (using an odd number to be able to find it easy in kmode) */,
|
||
|
TimerApcProc,
|
||
|
&value /*callback argument*/,
|
||
|
FALSE );
|
||
|
|
||
|
if (!bSuccess)
|
||
|
{
|
||
|
printf("SetWaitableTimer failed!\n");
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
for (;value <= 10; value++ )
|
||
|
{
|
||
|
SleepEx(INFINITE, TRUE /*alertable*/ );
|
||
|
}
|
||
|
|
||
|
CloseHandle( hTimer );
|
||
|
return 0;
|
||
|
}
|
||
|
|