- - PR -
VC6.0MFC:無限LOOPから脱出できません
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-12-26 00:11
void CMyView:nSomeCommand()
{ BeginWaitCursor(); while(!kbhit())//実行は出来ますが無限LOOPです! ; //ここをどのように変更すればいいですか? EndWaitCursor(); } つまり やりたいことは、何かキー入力で脱出したいのです。 Ctrl + Alt + Delete では、可能でしたが・・・ | ||||
|
投稿日時: 2005-12-26 01:11
kbhit って DOS 窓でしか使えないんじゃなかったでしたっけ?
_________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2005-12-26 11:15
確かに標準コンソールが存在しない状態では、コンソール入出力関数を使うことは出来ないでしょうね。 Windows APIで同様のことを行いたいなら、GetKeyboardState APIになるのかな。でもこの場合には設計をもう一度考えてみたほうが良いと思う。処理をスレッドとしてGUIから分離するなり、メッセージボックスを表示するなり、Windowsらしいやり方が他にあるはずですから。 _________________ 甕星 <mikahosi@abox9.so-net.ne.jp> http://blogs.msmvp.jp/mikahosi/ | ||||
|
投稿日時: 2005-12-27 01:48
PeekMessage() でウィンドウメッセージを取得して、
WM_KEYDOWNだったらキーが押されたイベントだから処理中止、 それ以外だったら、メッセージを処理してやる。 というのが基本です。 (詳細は、PeekMessageでググれば見つかるでしょう) ただし、メッセージポンプを何箇所にも記述するのは妙なバグの原因になりやすいです。 (1) 重い処理そのものは、別スレッドに分離する。 (2) WindowかViewの、WM_KEYDOWNイベントハンドラで処理中止フラグを立てる。 (3) 処理スレッドでフラグをチェックして処理を中断する。 という構造の方が綺麗に行く場合も多いので、どちらを選ぶか慎重に考えるべきかと。 | ||||
|
投稿日時: 2006-02-09 00:53
スレッドで解決しました
方法はいくつかあるみたいですね! 皆様、ありがとうございました。 |
1