• ベストアンサー

ループからの抜け出し方

VC++でMFCで作っています。 ある処理を継続的に実行させ、何らかのキー入力で通常の待機状態に戻すにはどうしたらいいでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • sha-girl
  • ベストアンサー率52% (430/816)
回答No.2

ひょっとしてボタンとか押せない状態になりますか? 完全にループ状態にはいっている場合、 ボタンをおしてもCPUが占有状態になってしまいメッセージが届きません。 方法としてはそのループのプログラムを別のスレッドに してしまうかあるいは ループの中でPeekMessage関数で、メッセージが入っているか どうかを確認する必要があります。 PeekMessageについて調べてみてください。

saikoro
質問者

お礼

ありがとうございました。 PeekMessage()で解決しました。

その他の回答 (3)

noname#11476
noname#11476
回答No.4

ああ、分かりました。ループはマルチスレッドでない上に、ループ内でWindowsに一度も制御を移していないんですね。 その場合は、 1) No.2,3のご回答にあるようにPeekMessage()を使ってループ内でWindowsに制御を渡すようにする。 2) そのループをマルチスレッドで実行する。 のどちらかの対策が必要です。 最低1)を行わないとWindows9x/Me系統のOSだと完全にループにCPUが占有されてしまいます。 2)の処理では、はじめからWindowsに対してループ実行中でも他の処理をするように指示していることになります。

saikoro
質問者

お礼

ありがとうございました。 PeekMessage()で解決しました。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

こちらをどうぞ。 http://www.expertmg.co.jp/html/cti/vctips/others.htm#長い処理をする時の対策 これで、キーを受け付ける状態になります。

saikoro
質問者

お礼

ありがとうございました。 PeekMessage()で解決しました。

noname#11476
noname#11476
回答No.1

WM_KEYDOWN などのイベントで呼ばれる関数をつくり、フラグの変数(自分で決める)を操作して、ループ内でその変数をチェックするのではだめなのですか?

saikoro
質問者

補足

イベントで呼ばれる関数の中で、メンバ変数を書き換えて、実行中のループ内でこれをチェックするということですよね。 ループ実行中でも他も関数が実行できますか。 (やってみたのですが、どうもうまくループを抜けれませんでした)

関連するQ&A