win32 6.1 定时器

本文介绍了DOS时代的定时方法以及Windows操作系统中的定时器机制。Windows的SetTimer函数允许应用程序在指定时间后接收到通知,通过回调函数或WM_TIMER消息。然而,定时器的消息级别较低,可能会被丢弃或合并,不适合用于保证精确的定时任务或时间计数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  1. DOS的定时功能介绍:
    1. 在DOS操作系统中要用到定时功能的时候一般有两种方法,一种是用一个空循环来延时;二是截获时钟中断。
    2. 计算机的硬件时钟会以每55ms一次的频率触发8号中断,而在默认的int 08 中断处理程序中有一句调用 int 1ch 的代码,所以截获 int 08h 或者 int 1ch 都可以达到定时的要求。
    3. 第一种方法的定时效果随计算机主频的不同可能会大不相同,相比之下,第二种方法更为常见。
  2. windows定时器简介:
    1. 在应用程序需要使用定时器时,可以用 SetTimer 函数向 Windows申请一个定时器,要求系统在制定的时间以后“通知”应用程序,如果申请成功的话,系统会以制定的时间周期调用 SetTimer函数指定的回调函数,或者向指定窗口发生 WM_TIMER 消息。
    2. 与DOS操作系统固定以 55ms 的间隔触发中断服务程序相比,SetTimer 函数可以指定的时间间隔更为灵活,以ms为单位,可以指定一个周期为32位整数,将近50天范围的时间周期。
    3. 但是在具体使用中不要被这个参数所迷惑:由于Windows的定时器同样基于时钟终端的,所以虽然参数单位是ms,但精通还是55ms,如果指定一个小与55ms的周期,不管是1ms,还是54ms,windows最快也只能在每个时钟中断的时候触发这个定时器。
    4. 使用定时器的另一个要点就是 定时器消息 是一个低级别的消息,这表现在两个方面:
      1. 首先,Windows 只有在消息队列中没有其他消息的情况才会发送 WM_TIMER消息,如果窗口过程忙于处理某个消息没有返回,使消息队列中有消息积累起来,那么WM_TIMER消息就会被丢弃,在消息队列再度空闲的时候,被丢弃的WM_TIMER消息不会被补发(用一句经典的话来描述:“过去的就让他过去啊”)
      2. 其次,消息队列中不会有多条WM_TIMER消息,如果消息队列中已经有一条WM_TIMER消息,还没来处理,又到了定时的时刻,那么两条WM_TIMER消息会被合并成一条。
      3. 由此可见,应用程序不能依靠定时器来保证某件事情必须在规定的时刻被处理,另外,也不能依赖对定时器消息计数来确定已经过去了多少时间。
  3. Windows定时器的使用:
    1. 定时器的初始化和关闭方法:
      设置多少时间发送一次WM_TIMER消息或多少时间执行一次回调函数。
      在这里插入图片描述
    2. 定时器使用方法:
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值