有VB6吗Timer
控件启动时创建一个单独的处理线程?
VB6 定时器控件不是某种在后台线程上运行的忙等待循环。他们根本就没有真正“跑”。
据我所知,当您设置 Enabled = True(或更改 Interval,如果它是 0)时,控件会调用 SetTimer() 。当您设置 Enabled = False(或将 Interval 设置为 0)时,它会调用 KillTimer()。
正常的 VB6 消息循环(当然在 UI 线程上运行)通过将传入的 WM_TIMER 消息分派到关联的 Timer 事件处理程序代码来处理它们。因此,事件处理程序中的代码在 UI 线程上运行,阻止进一步的消息处理,直到退出。间隔似乎被截断为无符号 16 位值 - 由于遗留原因(16 位 VB 和 Windows)?
任何类似程序中编码的繁忙等待循环(所有代码都在 UI 线程上运行)的内容当然都会阻止消息处理,从而给人一种计时器不会“触发”的错觉。由于 WM_TIMER 是低优先级消息,因此当您绑定 UI 线程时,它们不会在消息队列中深深堆积:
WM_TIMER 消息是低优先级消息。 GetMessage 和
PeekMessage 函数仅在没有其他消息时才发布此消息
较高优先级的消息位于线程的消息队列中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)