我对MFC中的设置定时器功能感到困惑;它是如何工作的?它是一个等待一段时间的线程还是别的什么?请找个人解释一下。提前感谢。
SetTimer请求操作系统在指定的时间间隔内生成一个WM_TIMER消息。因此,计时是在操作系统的多任务处理中完成的,而不是在调用应用程序中完成的。
这不是一个特殊的线程。如果进程拥有一个窗口,那么进程的每个Win32线程都可以有消息队列。控制台应用程序线程通过第一次调用"user32.dll"函数获得一个。消息/事件驱动的应用程序(如MFC应用程序)使用该消息队列。SetTimer与Win32的pedant SetTimer相同。它指示操作系统(是的,不是你的应用程序)在给定的时间间隔内向你的应用程序发出一个WM_TIMER消息。应用程序的主消息循环将其分派给MFC类。如果你设置了一个CALLBACK,默认的窗口进程将调用这个CALLBACK而不是调度WM_TIMER消息。如果你阻塞了你的主循环(例如通过Sleep(10000)),则不会发送WM_TIMER消息。定时器消息永远不会有一个精确的间隔。如果你想每1000毫秒得到一个信号,你可以在1100或900之后得到一个。WM_TIMER的根源可以追溯到古代,当时MS使用协作多任务作为一个进程OS Windows的表述。