我有一个旧的VB6应用程序,它有一个计时器问题。有一种模态形式,包含一些元素和两个定时器(VB6标准定时器)。每个计时器都像这样工作(伪代码):
-- TimerEvent Start
DoSomething
DoEvents
-- TimerEvent End
然后,在某个时间点,会引发来自OCX控件的事件,导致某些连接丢失。与计时器本身无关。但是在这一点上,定时器事件不会再为两个定时器引发,尽管 - 现在是奇怪的东西 - 定时器被启用并且设置了2000的间隔。即使重新启用和重新设置间隔也没有任何影响。当引发来自相同OCX控件的另一个事件以恢复连接时,计时器事件会再次突然升高。 即使删除OCX控件事件处理程序中的所有代码,定时器也不起作用。
我对DoEvents“模式”不是很熟悉,但我认为这个问题必须与DoEvents有关。删除它并没有改变任何东西。
有谁知道这里会发生什么?我已经找到了任何可以防止计时器提升已经过去的事件的全局设置,但是出于上帝的考虑,我找不到任何一个。
我对此感到疯狂......
感谢您的帮助。
答案 0 :(得分:0)
这是另一个计时器内的计时问题。此另一个计时器ping另一个IP,ping超时为200ms。此定时器间隔为200毫秒。因此,如果ping超时(因为另一台机器已断开连接),则计时器的触发频率高于处理时间。所以它搞乱了事件队列并阻止所有其他计时器被解雇。 通过将定时器间隔增加到1000毫秒它可以工作,虽然更好的解决方案是停止计时器,处理事件然后重新启动计时器。
感谢您提供的有用提示!