0

タイマーの問題がある古いVB6アプリケーションがあります。いくつかの要素と2つのタイマー(VB6標準タイマー)を含むモーダル形式があります。各タイマーは次のように機能します(擬似コード):

-- TimerEvent Start 
DoSomething
DoEvents
-- TimerEvent End

次に、ある時点で、接続が失われたというOCXコントロールからのイベントが発生します。タイマー自体とは何の関係もありません。しかし、この時点では、タイマーイベントは両方のタイマーで発生しなくなりましたが、タイマーは有効になっていて、2000の間隔が設定されています。間隔を再度有効にして再設定しても、効果はありません。接続が復元されたという同じOCXコントロールからの別のイベントが発生すると、タイマーイベントが突然再び発生します。OCXコントロールイベントハンドラーのすべてのコードを削除しても、タイマーは機能しません。

私はDoEventsの「パターン」にあまり精通していませんが、問題はDoEventsに関連している必要があると思います。これを削除しても何も変わりませんでした。

ここで何が起こるか考えている人はいますか?タイマーが経過イベントを発生させないようにするグローバル設定をすでに探しましたが、神のために見つけることができませんでした。

私はこれに夢中になる...

助けてくれてありがとう。

4

1 に答える 1

0

返事が遅くなってごめん。

別のタイマー内のタイミングの問題でした。この他のタイマーは、200 ミリ秒の ping タイムアウトで別の IP に ping を実行します。このタイマー間隔は 200ms です。そのため、(他のマシンが切断されたために) ping がタイムアウトした場合、タイマーは処理できるよりも頻繁に起動しています。そのため、イベント キューが台無しになり、他のすべてのタイマーの起動がブロックされます。タイマー間隔を 1000 ミリ秒に増やすことで機能しましたが、より良い解決策はタイマーを停止し、イベントを処理してからタイマーを再起動することです。

役立つヒントをありがとう!

于 2012-06-20T08:13:02.410 に答える