29.内核创建定时器
- 以id创建时钟定时器
1 HANDLE time1 = CreateWaitableTimerA(NULL, TRUE, "mytimer");//创建时钟
- 创建时间
1 LARGE_INTEGER mytime; 2 mytime.QuadPart = -10000000; //等待一秒
- 设置定时器
1 // 第一个参数:时钟 第二个参数:时间 第三个参数:多长时间循环一次
//第四个参数:回调函数 第五个参数:(用于计数调用一次自增1) 第六个参数:默认
2 SetWaitableTimer(time1, &mytime, 3000,timerun, &dwparam,FALSE)
- 等待定时器
1 for (int i = 0; i < 15; i++, dwparam++)//循环多少次 2 { 3 SleepEx(INFINITE, TRUE); 4 }
- 取消定时器并释放句柄
1 CancelWaitableTimer(time1);//取消定时器 2 CloseHandle(time1);
完整代码:
1 #include<stdio.h> 2 #include <stdlib.h> 3 #include <Windows.h> 4 5 6 //回调函数,函数指针可以来调用 7 VOID CALLBACK timerun(void *parg,DWORD timearg,DWORD timehigh) 8 { 9 DWORD dwindex = *(DWORD *)parg; 10 printf("\n第%d次", dwindex); 11 } 12 13 void main() 14 { 15 //创建时钟 16 HANDLE time1 = CreateWaitableTimerA(NULL, TRUE, "mytimer"); 17 18 if (time1 == NULL) 19 { 20 printf("创建失败"); 21 22 } 23 //设置等待时间 24 LARGE_INTEGER mytime; 25 mytime.QuadPart = -10000000; //等待一秒 26 27 DWORD dwparam = 1;//设置定时器初始次数 28 if (SetWaitableTimer(time1, &mytime, 3000, timerun, &dwparam, FALSE))//3000循环一次 29 { 30 printf("等待5秒开始干活"); 31 for (int i = 0; i < 15; i++, dwparam++)//循环多少次 32 { 33 SleepEx(INFINITE, TRUE); 34 } 35 } 36 37 //取消定时器 38 CancelWaitableTimer(time1); 39 CloseHandle(time1); 40 41 system("pause"); 42 }