请问VB6 Timer
控制创建一个单独的处理线程启动时?
Answer 1:
VB6 Timer控件不是在后台线程某种忙等待循环运行。 他们并不真正“跑”在所有。
至于当您设置启用=真我可以告诉(或更改时间间隔,如果是0)的控制使得SetTimer的()调用。 当您设置启用=假(或设置间隔为0),它使一个KillTimer函数()调用。
正常VB6消息循环(这当然UI线程上运行),将之分配到相关联的定时器的事件处理程序代码处理传入WM_TIMER消息。 因此,你的事件处理程序中的代码运行在UI线程上,阻止进一步的消息处理,直至退出。 间隔似乎被砍伤到16位无符号值 - 遗留原因(16位VB和Windows)?
就像一个忙等待循环在你的程序编码的任何东西(所有的代码运行在UI线程)当然会阻止消息的处理,给人的错觉,定时器不“火”。 因为WM_TIMER是一个低优先级的消息,他们不深堆叠在消息队列中,而你必须在UI线程绑定起来:
的WM_TIMER消息是一个低优先级的消息。 该GetMessage函数和函数的PeekMessage发布此消息,只有当没有其他更高优先级的消息是在线程的消息队列。
Answer 2:
不,计时器在同一个线程窗口过程,因此,Visual Basic 6的程序运行。 这意味着,如果你的处理器密集型操作,你可以不依赖于正在处理的WM_TIMER消息。
文章来源: Does VB6 Timer control create separate thread?