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 }

 

转载于:https://www.cnblogs.com/xiaochi/p/8409842.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值