次のコード行を実行する前に終了したい VB6 で実行時間の長いプロセスがあります。どうやってやるの?組み込み関数? 待機時間を制御できますか?
些細な例:
Call ExternalLongRunningProcess
Call DoOtherStuff
「DoOtherStuff」を遅らせるにはどうすればよいですか?
Nescio の回答(DoEvents) は機能しますが、アプリケーションが 1 つの CPU を 100% 使用することになります。スリープすると、UI が応答しなくなります。必要なのは2つの組み合わせであり、最も効果的と思われる魔法の組み合わせは次のとおりです。
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
なぜ 2 つの DoEvents と 1 つが 55 ミリ秒間スリープするのでしょうか? 55 ミリ秒のスリープは、VB6 が処理できる最小のスライスであり、超応答性が必要な場合 (API ではなく、アプリケーションが外部イベント、SendMessage、Interupts などに応答している場合) には、2 つの DoEvents の使用が必要になることがあります。 )。
VB.Net:WaitOneイベントハンドルを使用します。
VB 6.0:DoEventsループを見ました。
Do
If isSomeCheckCondition() Then Exit Do
DoEvents
Loop
最後に、あなたはただ眠ることができます:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sleep 10000
コードを2つのプロセスに分割します。最初のプロセスを実行してから、「長時間実行プロセス」を実行してから、2番目のプロセスを実行します。
現在のプロセスの途中で実行時間の長いプロセスを実行し、完了するのを待ちます。