ループ処理中にDoEventを挿入していても「元のサイズに戻す」が効かない問題を解決するには?


CNX  2005-12-01 12:58:54  No: 128473

VB6で同じ処理を繰り返すプログラムを作成しました。
処理はDo〜WhileやFor〜Nextでループされ、その中で文字列を検索したり、Excelを裏で起動して処理をさせたりしています。
この時、毎ループDoEventsが実行されるようにしてあるのですが、フォームを最小化してしまうと、それでもタスクバーに入ったアプリケーションを右クリックして、コンテキストメニューから「元のサイズに戻す」を選択しても何も起きません。(元のサイズに戻りません)
フォームが最小化したままでは、処理のキャンセルも出来ないため永久ループのようにやっかいな状態に陥ります。
DoEventsを増やせばいいのか、他に良い方法があるのか・・・出来るだけ簡単(単純)な方法でこの問題を回避できる方法を教えてください。
よろしくお願いいたします。


matsu  2005-12-01 13:27:20  No: 128474

>DoEventsを増やせばいいのか、他に良い方法があるのか・・・出来るだけ簡単(単純)な方法でこの問題を回避できる方法を教えてください。

フォームのMinButton = Falseというように最小化できないようにするのはまずいですか?


CNX  2005-12-01 14:21:01  No: 128475

ご返信ありがとうございます。
ループ処理は場合によっては数時間〜数日掛かる気の長い処理をしているため、最小化できないと不便なのです(汗
また、フォームが若干大きめなのでそのまま表示させておくと短時間であっても結構邪魔に感じます。
色々と確認していますが、5%程の確率で復旧できる事があるようで、DoEventsが若干功を奏しているように見えます。


もげ  2005-12-01 17:54:40  No: 128476

ループ内で、Sleep(VB6ならAPI使用  この場合ですと100msとか短くてOK)は併用していますか?
やっている処理によっては、DoEventsだけでは辛いこともあります。


我龍院忠太  2005-12-01 18:32:33  No: 128477

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


もげ  2005-12-02 12:40:19  No: 128478

我龍院殿
>Loopの中に入れるSleepはSleep(1)で十分のなよう気がしますが。
>これでCPUの使用率は5%以下に落ちます。

勉強になりました。多謝です。


※作成する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。







   このエントリーをはてなブックマークに追加