windows c定时函数的使用

一、介绍
对应时间函数,c语言有标准库,但是要一直阻塞读取,这里介绍一种类似中断的处理方法,设置时间,时间到以后直接跳转到自己设定的函数里面执行,执行完以后返回当之前 的代码
使用这个可以
这里使用的ide:DEV C++

二、函数介绍
1、创建回调

MMRESULT timeSetEvent(
	UINT uDelay,
	UINT uResolution,
	LPTIMECALLBACK fptc,
	DWORD dwUser,
	UINT fuEvent
);

uDelay:以毫秒指定事件的周期。
uResolution :以毫秒指定延时的精度,数值越小定时器事件分辨率越高。缺省值为1ms。
fptc :指向一个回调函数。
dwUser :存放用户提供的回调数据。
fuEvent :指定定时器事件类型:
TIME_ONESHOT:uDelay毫秒后只产生一次
TIME_PERIODIC :每隔uDelay毫秒周期性地产生事件

2、回调函数
除了函数格式其他的自己写

void WINAPI timerfun(UINT wTimerID, UINT msg,DWORD dwUser,DWORD dwl,DWORD dw2)
{
             //需要执行的操作
}

3、注销回调

MMRESULT timeKillEvent(UINT uTimerID) ;

uTimerID:事件的ID号

三、使用方法
1、添加库"WinMM.Lib"
下载链接
http://www.opdown.com/soft/125224.html#download
在这里插入图片描述
在这里插入图片描述
注意:一定设置成32位编译,找了好久的问题,最后就是64位不支持
在这里插入图片描述

2、添加头文件和和参数

#include <stdio.h>
#include <windows.h>
#include <Mmsystem.h>

#pragma comment (lib, "WinMM.lib")

3、编写回调函数

void WINAPI time_callback(UINT wTimerID, UINT msg, DWORD dwUser, DWORD  dw1, DWORD dw2)
{
      printf("callback hello guoguo\n");
}

4、创建事件

 MMRESULT timer_id = timeSetEvent(
                  1000, // 以毫秒指定事件的周期
                  1, // 精度, 默认1ms
                  &time_callback, // 回调函数地址
                  (DWORD)1, // 存放用户提供的回调数据
                  TIME_PERIODIC); // TIME_ONESHOT -- 执行一次;  TIME_PERIODIC -- 周期性执行;
      if(timer_id != 0)
    {
        printf("create timer ok\n");
	    printf("timer id %d\n", timer_id);
    }
    else
    {
        printf("create timer fail\n");
        return -1;
    }

四、完整代码

#include <stdio.h>
#include <windows.h>
#include <Mmsystem.h>

#pragma comment (lib, "WinMM.lib")
//#pragma comment (lib, "WinMM")


void WINAPI time_callback(UINT wTimerID, UINT msg, DWORD dwUser, DWORD  dw1, DWORD dw2)
{
      printf("callback hello guoguo\n");
}

int main()
{
     MMRESULT timer_id = timeSetEvent(
                  1000, // 以毫秒指定事件的周期
                  1, // 精度, 默认1ms
                  &time_callback, // 回调函数地址
                  (DWORD)1, // 存放用户提供的回调数据
                  TIME_PERIODIC); // TIME_ONESHOT -- 执行一次;  TIME_PERIODIC -- 周期性执行;
      if(timer_id != 0)
    {
        printf("create timer ok\n");
	    printf("timer id %d\n", timer_id);
    }
    else
    {
        printf("create timer fail\n");
        return -1;
    }

    while(1);
	timeKillEvent(timer_id);

    return 0;
}

五、结果
在这里插入图片描述

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值