
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に関する質問です。
-
dosバッチ起動後、画面を閉じな...
-
jupyter notebookが開けません!
-
VBでDosコマンドを動かすには
-
ディスクの空き容量を取得する...
-
文字の点滅はどうやるのですか?
-
system関数でのシェル起動について
-
RTX1100の削除コマンド
-
PowerShell実行結果をデスクト...
-
C# タスクスケジューラ操作につ...
-
コマンドプロンプトですべてのU...
-
ACCESSのサブフォームの...
-
DOSコマンドでポートから受信
-
【Teratermマクロ】文字列の一...
-
アンドロイドでも、robocopyは...
-
日付の加算方法 AddDate関数?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
ttlで戻り値を取得する方法
-
コマンドプロンプトで表示が多...
-
バッチファイルでキー操作を行う。
-
別のユーザーフォームのコマン...
-
Tera Term Proに関する質問です。
-
VBA でshell関数を使ってコマン...
-
【Teratermマクロ】文字列の一...
-
"伴われる"は正しい日本語ですか?
-
文字の点滅はどうやるのですか?
-
DOSコマンドでポートから受信
-
makeコマンドのエラー
-
VBユーザーフォームで時間入力
-
ExcelVBAでDOSコマンドの標準出...
-
HTAで n秒間 Sleepする方法は?
-
コンボボックス(最終行取得)
-
PowerShell実行結果をデスクト...
-
コマンドプロンプトですべてのU...
-
コマンドプロンプトについて
-
[WSH|JS|VB] telnetコマンドの...
おすすめ情報