11

次のコード行を実行する前に終了したい VB6 で実行時間の長いプロセスがあります。どうやってやるの?組み込み関数? 待機時間を制御できますか?

些細な例:

Call ExternalLongRunningProcess
Call DoOtherStuff

「DoOtherStuff」を遅らせるにはどうすればよいですか?

4

8 に答える 8

17

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 の使用が必要になることがあります。 )。

于 2008-09-19T15:15:31.097 に答える
14

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
于 2008-09-18T18:12:28.257 に答える
2

シェル化されたプロセスがいつ終了したかを判断する方法:

外部プロセスを呼び出している場合は、事実上、非同期で呼び出しています。外部プロセスが完了するまで待機する方法については、上記のMSサポートドキュメントを参照してください。

于 2008-09-18T18:13:32.590 に答える
0

コードを2つのプロセスに分割します。最初のプロセスを実行してから、「長時間実行プロセス」を実行してから、2番目のプロセスを実行します。

于 2008-09-18T18:11:26.073 に答える
0

現在のプロセスの途中で実行時間の長いプロセスを実行し、完了するのを待ちます。

于 2008-09-18T18:12:04.123 に答える