试图了解设置计时器功能如何在MFC中工作

时间:2015-05-20 11:48:00

标签: c++ winapi mfc

我对MFC中的定时器功能感到困惑;这个怎么运作?它是一个等待一段时间或其他东西的线程吗?请有人解释一下。提前致谢。

2 个答案:

答案 0 :(得分:2)

SetTimer要求操作系统以指定的时间间隔生成WM_TIMER消息。因此,时间是在操作系统的多任务处理中完成的,而不是在调用应用程序中。

答案 1 :(得分:2)

这不是一个特殊的线程。如果进程拥有一个窗口,进程的每个Win32线程都可以有消息队列。控制台应用程序线程首先调用" user32.dll"功能。消息/事件驱动的应用程序(如MFC应用程序)使用该消息队列。 SetTimer与Win32 pedant SetTimer完全相同。它指示操作系统(是的,而不是您的应用程序)以给定的间隔向您的应用程序发出WM_TIMER消息。应用程序的主消息循环将其分发给您的MFC类。如果设置了CALLBACK,则默认windowproc将调用该CALLBACK而不是调度WM_TIMER消息。 如果阻止主循环(例如,通过Sleep(10000)),则不会分派WM_TIMER消息。 定时器消息永远不会达到一个确切的间隔。如果你想要每1000毫秒一个信号,你可以在1100或900后得到一个。 WM_TIMER的根源可以追溯到古代,MS使用协作式多任务作为一个进程操作系统Windows的措辞。