gpt4 book ai didi

multithreading - VB6 Timer 控件是否创建单独的线程?

转载 作者:行者123 更新时间:2023-12-04 06:44:03 24 4
gpt4 key购买 nike

VB6 Timer控件在启动时创建一个单独的处理线程?

最佳答案

VB6 Timer 控件不是在后台线程上运行的某种忙等待循环。他们根本没有真正“跑”。

据我所知,当您设置 Enabled = True(或更改 Interval,如果它为 0)时,控件会调用 SetTimer()。当您设置 Enabled = False(或将 Interval 设置为 0)时,它会调用 KillTimer()。

普通的 VB6 消息循环(当然在 UI 线程上运行)通过将传入的 WM_TIMER 消息分派(dispatch)给相关的 Timer 的事件处理程序代码来处理它们。因此,事件处理程序中的代码在 UI 线程上运行,阻止进一步的消息处理,直到退出。由于遗留原因(16 位 VB 和 Windows),间隔似乎被截断为无符号的 16 位值?

在您的程序中编码的任何诸如忙等待循环(您的所有代码都在 UI 线程上运行)当然会阻塞消息处理,从而产生定时器不会“触发”的错觉。由于 WM_TIMER 是低优先级消息,因此当您绑定(bind) UI 线程时,它们不会在消息队列中堆积得很深:

The WM_TIMER message is a low-priority message. The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue.

关于multithreading - VB6 Timer 控件是否创建单独的线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11707714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com