
No.1ベストアンサー
- 回答日時:
>WaitForSingleObjectで待って次のコマンド送信
>というようにやっていくとエディットボックスへのログ表示がコマンドのやり取りが一通り
>終わるまで待たされてしまいます。
メインスレッドでWaitForSingleObjectで待つと
ウィンドウズのメッセージループが止まってしまいます。(例えばボタンを押しても反応しなくなります)
WaitForSingleObjectは別スレッドで動かし、それをメインスレッド側に通知する仕組みを作ると良いでしょう。
(スレッドの作成方法はAfxBeginThread(MFC)、CWinThread (MFC)、beginthread、CreateThread等で検索してみてください)
通知する仕組みは、ウインドウズメッセージを使うか
同期系のAPIを使ってグローバルなフラグを見る方法があります。
※同期系のAPI:CriticalSection、CreateMutex、Interlock系(InterlockedIncrement等)
※ウィンドウズメッセージを使う場合はPostMessage/WM_APP/WM_USER/PostThreadMessageで検索してみてください)
この回答へのお礼
お礼日時:2010/12/11 08:59
助かりました。ありがとうございました。
早速試したところうまく動くようになりました。
他のかたには申し訳ありませんが、最初に回答していただいたということで
ベストアンサーに選ばせていただきました。
No.4
- 回答日時:
イベント駆動にせず、ポーリングにするという手もあると思います。
WaitForSingleObjectの用法が書かれていませんので微妙ですが、
WaitForSingleObjectの待ち時間に無限待ちを指定せず、0を指定して
対象のハンドルが、シグナル状態になった時(WAIT_OBJECT_0が返されたとき)に
コマンドを処理をする方法です。
これはWaitForSingleObject関数をすぐに制御を返すようにして、
結果は、待ち状態であれば0msがタイムアウトし(WAIT_TIMEOUT)が
返却されるはずなので、これを無視するという方法です。
No.3
- 回答日時:
ウィンドウを扱うプロセス(スレッド)では、MsgWaitForMultipleObjectsかMsgWaitForMultipleObjectsExを使ってください。
# http://msdn.microsoft.com/ja-jp/library/cc429427 …

No.2
- 回答日時:
MFC は使ったことがないので、直接の回答ではなく、考え方の提示レベルになります。
※既に回答にあるとおり、マルチスレッドで対応するのが正しいとは思います。
そこで、こんな感じでいけるのじゃないかと。
do
{
・タイムアウトを短めに設定して
if( GetMessage(&lpMsg, NULL, 0, 0) != 0 )
{ // なにかメッセージが、たまってない確認して、あったら処理
TranslateMessage(&lpMsg);
DispatchMessage(&lpMsg);
}
・WaitForSingleObject();
} while(! 受信イベント発生)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
ttlで戻り値を取得する方法
-
コマンドプロンプトで表示が多...
-
Tera Term Proに関する質問です。
-
バッチファイルでキー操作を行う。
-
makeコマンドのエラー
-
別のユーザーフォームのコマン...
-
PowerShell実行結果をデスクト...
-
HEXから元に戻すには
-
【Teratermマクロ】文字列の一...
-
文字の点滅はどうやるのですか?
-
VB6、コマンドボタンの背景色を...
-
コンボボックス(最終行取得)
-
カーネルモジュール
-
VB6.0でフォルダのアクセス制限...
-
system関数でのシェル起動について
-
パワーシェル 画面解像度 変更
-
[WSH|JS|VB] telnetコマンドの...
-
ローマ字入力で「トゥ」を入力...
-
word の文字入力 文字が青色に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
ttlで戻り値を取得する方法
-
別のユーザーフォームのコマン...
-
バッチファイルでキー操作を行う。
-
Tera Term Proに関する質問です。
-
【Teratermマクロ】文字列の一...
-
VBA でshell関数を使ってコマン...
-
VBユーザーフォームで時間入力
-
文字の点滅はどうやるのですか?
-
"伴われる"は正しい日本語ですか?
-
VB6で、コマンドボタン自身の色...
-
PowerShell実行結果をデスクト...
-
コンボボックス(最終行取得)
-
EEPROMのデータの初期化について
-
入力待ち状態になるexeファイル...
-
JP1起動バッチについて
-
コマンドプロンプトですべてのU...
-
ImageMagickを使って画像の特定...
-
ACCESSのサブフォームの...
おすすめ情報