#include <windows.h>
#include <stdio.h>
HANDLE hTimer = NULL;
HANDLE hTimerQueue = NULL;
char T_back = 0;
// 回调函数,定时器到期后执行该函数
VOID CALLBACK TimerRoutine(PVOID lpParam, BOOLEAN TimerOrWaitFired) {
if (lpParam == NULL)
{
printf("TimerRoutine lpParam is NULL\n");
}
else
{
// lpParam points to the argument; in this case it is an int
T_back++;
printf("定时器中断任务执行%d 次.\n", T_back );
//printf("定时器中断任务执行. Parameter is %d.\n", *(int*)lpParam);
}
}
int init_time(T_ms)
{
int arg = 123;
int run_time = 0;
// Create the timer queue.
hTimerQueue = CreateTimerQueue();
if (NULL == hTimerQueue)
{
printf("CreateTimerQueue failed (%d)\n", GetLastError());
return 2;
}
// Set a timer to call the timer routine in T_ms seconds. 周期性定时执行回调函数
if (!CreateTimerQueueTimer(&hTimer, hTimerQueue,
(WAITORTIMERCALLBACK)TimerRoutine, &arg, T_ms, T_ms, 0))
{
printf("CreateTimerQueueTimer failed (%d)\n", GetLastError());
return 3;
}
// TODO: Do other useful work here
printf("Call timer routine in %d ms...\n", T_ms);
}
void main() {
init_time(2000); //2s定时中断任务
while (1)
{
run_time++;
}
// Delete all timers in the timer queue.
if (!DeleteTimerQueue(hTimerQueue))
printf("DeleteTimerQueue failed (%d)\n", GetLastError());
}