设为首页 加入收藏

TOP

计时器(三)
2010-12-30 21:12:14 】 浏览:24033
Tags:计时器

计时器讯息不是非同步的
 

因为计时器使用硬体计时器中断,程式写作者有时会误解,认为他们的程式会非同步地被中断来处理WM_TIMER讯息。

然而,WM_TIMER讯息并不是非同步的。WM_TIMER讯息放在正常的讯息伫列之中,和其他讯息排列在一起,因此,如果在SetTimer呼叫中指定间隔为1000毫秒,那么不能保证程式每1000毫秒或者989毫秒就会收到一个WM_TIMER讯息。如果其他程式的执行事件超过一秒,在此期间内,您的程式将收不到任何WM_TIMER讯息。您可以使用本章的程式来展示这一点。事实上, Windows对WM_TIMER讯息的处理非常类似於对WM_PAINT讯息的处理,这两个讯息都是低优先顺序的,程式只有在讯息伫列中没有其他讯息时才接收它们。

WM_TIMER还在另一方面和WM_PAINT相似:Windows不能持续向讯息伫列中放入多个WM_TIMER讯息,而是将多余的WM_TIMER讯息组合成一个讯息。因此,应用程式不会一次收到多个这样的讯息,尽管可能在短时间内得到两个WM_TIMER讯息。应用程式不能确定这种处理方式所导致的WM_TIMER讯息「遗漏」的数目。

这样,WM_TIMER讯息仅仅在需要更新时才提示程式,程式本身不能经由统计WM_TIMER讯息的数目来计时(在本章後面,我们将编写两个每秒更新一次的时钟程式,并可以看到如何做到这一点)。

为了方便起见,下面在讨论时钟时,我将使用「每秒得到一次WM_TIMER讯息」这样的叙述,但是请记住,这些讯息并非精确的tick中断。

计时器的使用:三种方法
 

如果您需要在整个程式执行期间都使用计时器,那么您将得从WinMain函式中或者在处理WM_CREATE讯息时呼叫SetTimer,并在退出WinMain或回应WM_DESTROY讯息时呼叫KillTimer。根据呼叫SetTimer时使用的参数,可以下列三种方法之一使用计时器。

方法一
 

这是最方便的一种方法,它让Windows把WM_TIMER讯息发送到应用程式的正常视窗讯息处理程式中,SetTimer呼叫如下所示:

第一个参数是其视窗讯息处理程式将接收WM_TIMER讯息的视窗代号。第二个参数是计时器ID,它是一个非0数值,在整个例子中假定为1

首页 上一页 1 2 3 4 5 6 7 下一页 尾页 3/27/27
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇子视窗控制项 下一篇滑鼠

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目