vb6を始めて3週間になります。
フォーム上の「スタート」ボタンを押して以下の処理がスタートしたとします。
private sub start()
時間的に長い処理です。(sleep関数なども使用していて、長くなりがち)
end sub
この処理の実行中に、フォーム上の「一時停止ボタン」で、処理を一時停止させたいのですが、どうすればよいか分かりません。(ちなみに、もう一度「一時停止ボタン」を押したら、続きがやりたい。)今考えている方法がPGM的に難しい場合は、このような処理を解決できるその他のいい方法はないでしょうか?
Dummyで何かファイルを作成して、
そのファイルが存在する場合には処理しない、などにしておく、とか
方法としてはいろいろあるかと。
まず、処理中に割り込みを入れるためには、
DoEvents が必要なのはお分かりですよね。
その上で、一時停止ボタンを押されたら、フラグを立てるなりして、
そのフラグが立っている間は、永久ループするような処理を
ところどころに入れておくとか。
While fPause
Sleep(100) ' CPU負荷を減らすため
DoEvents ' 割り込み可能とするため
End While
こんな感じで。
ならば、再度「一時停止」ボタンを押した時に、フラグをクリアすれば、
ループから抜けて続きが始まる、と。
ぱっと思いついた方法なので、
もっといい方法があるんだろうな・・・と思いながら投稿。
・・・さん、聖 羅樹さん ご意見ありがとうございます。
例えば、
Sleep(10000)'10秒
を実行中に、6秒たったところで「一時停止」ボタンを押すして、再度そのボタンを押すと残りの4秒を実行することは可能でしょうか?(タイマーを使わないと無理でしょうか?)
意図的にはThreadやFiberが使えないVB6では、そういう構造は
やめるべきでしょう。1つ1つの処理を細かく分けて、都合に
応じて順次実行していく、という作りに改めるべきでは。
聖 羅樹さんに教えていただいた方法
While fPause
Sleep(100) ' CPU負荷を減らすため
DoEvents ' 割り込み可能とするため
End While
で解決できました。聖 羅樹さん、・・・ さん、K.J.K.さんありがとうございました。
ツイート | ![]() |