プロが教える店舗&オフィスのセキュリティ対策術

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

A 回答 (4件)

ああ、分かりました。

ループはマルチスレッドでない上に、ループ内でWindowsに一度も制御を移していないんですね。

その場合は、
1) No.2,3のご回答にあるようにPeekMessage()を使ってループ内でWindowsに制御を渡すようにする。
2) そのループをマルチスレッドで実行する。
のどちらかの対策が必要です。

最低1)を行わないとWindows9x/Me系統のOSだと完全にループにCPUが占有されてしまいます。

2)の処理では、はじめからWindowsに対してループ実行中でも他の処理をするように指示していることになります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/09/20 12:57

こちらをどうぞ。


http://www.expertmg.co.jp/html/cti/vctips/others …長い処理をする時の対策

これで、キーを受け付ける状態になります。
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/09/20 12:58

ひょっとしてボタンとか押せない状態になりますか?


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

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

お礼日時:2002/09/20 12:59

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

るのではだめなのですか?

この回答への補足

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

補足日時:2002/09/19 22:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています