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 }

 

posted @ 2018-02-03 16:33  喵小喵~  阅读(151)  评论(0编辑  收藏  举报