- ベストアンサー
ループからの抜け出し方
VC++でMFCで作っています。 ある処理を継続的に実行させ、何らかのキー入力で通常の待機状態に戻すにはどうしたらいいでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ひょっとしてボタンとか押せない状態になりますか? 完全にループ状態にはいっている場合、 ボタンをおしてもCPUが占有状態になってしまいメッセージが届きません。 方法としてはそのループのプログラムを別のスレッドに してしまうかあるいは ループの中でPeekMessage関数で、メッセージが入っているか どうかを確認する必要があります。 PeekMessageについて調べてみてください。
その他の回答 (3)
ああ、分かりました。ループはマルチスレッドでない上に、ループ内でWindowsに一度も制御を移していないんですね。 その場合は、 1) No.2,3のご回答にあるようにPeekMessage()を使ってループ内でWindowsに制御を渡すようにする。 2) そのループをマルチスレッドで実行する。 のどちらかの対策が必要です。 最低1)を行わないとWindows9x/Me系統のOSだと完全にループにCPUが占有されてしまいます。 2)の処理では、はじめからWindowsに対してループ実行中でも他の処理をするように指示していることになります。
お礼
ありがとうございました。 PeekMessage()で解決しました。
- taka_tetsu
- ベストアンサー率65% (1020/1553)
こちらをどうぞ。 http://www.expertmg.co.jp/html/cti/vctips/others.htm#長い処理をする時の対策 これで、キーを受け付ける状態になります。
お礼
ありがとうございました。 PeekMessage()で解決しました。
WM_KEYDOWN などのイベントで呼ばれる関数をつくり、フラグの変数(自分で決める)を操作して、ループ内でその変数をチェックするのではだめなのですか?
補足
イベントで呼ばれる関数の中で、メンバ変数を書き換えて、実行中のループ内でこれをチェックするということですよね。 ループ実行中でも他も関数が実行できますか。 (やってみたのですが、どうもうまくループを抜けれませんでした)
お礼
ありがとうございました。 PeekMessage()で解決しました。