0

我有一个有计时器问题的旧 VB6 应用程序。有一个模态表单,其中包含一些元素和两个计时器(VB6 标准计时器)。每个计时器都是这样工作的(伪代码):

-- TimerEvent Start 
DoSomething
DoEvents
-- TimerEvent End

然后,在某个时间点,会引发来自 OCX 控件的某个连接丢失的事件。与计时器本身无关。但是此时,两个计时器都不再引发计时器事件,尽管 - 现在很奇怪 - 计时器已启用并设置了 2000 的间隔。即使重新启用和重新设置间隔也没有任何效果。当来自同一 OCX 控件的另一个事件引发连接已恢复时,计时器事件会突然再次引发。即使删除 OCX 控件事件处理程序中的所有代码,计时器也不起作用。

我对 DoEvents “模式”不是很熟悉,但我认为这个问题一定与 DoEvents 有关。删除它并没有改变任何东西。

有谁知道这里会发生什么?我已经在寻找任何可以阻止计时器引发已逝事件的全局设置,但看在上帝的份上,我找不到任何设置。

我要疯了……

感谢您的任何帮助。

4

1 回答 1

0

回复晚了非常抱歉。

这是另一个计时器内部的计时问题。这个另一个计时器 ping 另一个 IP,ping 超时为 200 毫秒。此计时器间隔为 200 毫秒。因此,如果 ping 超时(因为另一台机器已断开连接),则计时器的触发频率超过了可以处理的频率。所以它弄乱了事件队列并阻止了所有其他计时器的触发。通过将计时器间隔增加到 1000 毫秒,它可以工作,尽管更好的解决方案是停止计时器,处理事件,然后重新启动计时器。

感谢您的有用提示!

于 2012-06-20T08:13:02.410 回答