VB6で同じ処理を繰り返すプログラムを作成しました。
処理はDo〜WhileやFor〜Nextでループされ、その中で文字列を検索したり、Excelを裏で起動して処理をさせたりしています。
この時、毎ループDoEventsが実行されるようにしてあるのですが、フォームを最小化してしまうと、それでもタスクバーに入ったアプリケーションを右クリックして、コンテキストメニューから「元のサイズに戻す」を選択しても何も起きません。(元のサイズに戻りません)
フォームが最小化したままでは、処理のキャンセルも出来ないため永久ループのようにやっかいな状態に陥ります。
DoEventsを増やせばいいのか、他に良い方法があるのか・・・出来るだけ簡単(単純)な方法でこの問題を回避できる方法を教えてください。
よろしくお願いいたします。
>DoEventsを増やせばいいのか、他に良い方法があるのか・・・出来るだけ簡単(単純)な方法でこの問題を回避できる方法を教えてください。
フォームのMinButton = Falseというように最小化できないようにするのはまずいですか?
ご返信ありがとうございます。
ループ処理は場合によっては数時間〜数日掛かる気の長い処理をしているため、最小化できないと不便なのです(汗
また、フォームが若干大きめなのでそのまま表示させておくと短時間であっても結構邪魔に感じます。
色々と確認していますが、5%程の確率で復旧できる事があるようで、DoEventsが若干功を奏しているように見えます。
ループ内で、Sleep(VB6ならAPI使用 この場合ですと100msとか短くてOK)は併用していますか?
やっている処理によっては、DoEventsだけでは辛いこともあります。
Loopの中にDoEventsをいくら入れても、バックグラウンドでExcelが
ゴニョゴニョやってる間は割り込みはかからないのでは。
もげさん
Loopの中に入れるSleepはSleep(1)で十分のなよう気がしますが。
これでCPUの使用率は5%以下に落ちます。
100ms位になると休んでる時間が多いので、K.J.K.さんお勧めの
MsgWaitForMultipleObjectsを使う必要があると思います。
http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200510/05100129.txt
我龍院殿
>Loopの中に入れるSleepはSleep(1)で十分のなよう気がしますが。
>これでCPUの使用率は5%以下に落ちます。
勉強になりました。多謝です。
| ツイート |
|