
No.1ベストアンサー
- 回答日時:
>WaitForSingleObjectで待って次のコマンド送信
>というようにやっていくとエディットボックスへのログ表示がコマンドのやり取りが一通り
>終わるまで待たされてしまいます。
メインスレッドでWaitForSingleObjectで待つと
ウィンドウズのメッセージループが止まってしまいます。(例えばボタンを押しても反応しなくなります)
WaitForSingleObjectは別スレッドで動かし、それをメインスレッド側に通知する仕組みを作ると良いでしょう。
(スレッドの作成方法はAfxBeginThread(MFC)、CWinThread (MFC)、beginthread、CreateThread等で検索してみてください)
通知する仕組みは、ウインドウズメッセージを使うか
同期系のAPIを使ってグローバルなフラグを見る方法があります。
※同期系のAPI:CriticalSection、CreateMutex、Interlock系(InterlockedIncrement等)
※ウィンドウズメッセージを使う場合はPostMessage/WM_APP/WM_USER/PostThreadMessageで検索してみてください)
助かりました。ありがとうございました。
早速試したところうまく動くようになりました。
他のかたには申し訳ありませんが、最初に回答していただいたということで
ベストアンサーに選ばせていただきました。
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で質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- その他(開発・運用・管理) WindowsからSSHでサーバーにあるファイルをダウンロードできない…。 3 2022/04/24 11:08
- Windows 10 外部ドライブにマウントできない問題について 9 2022/03/22 18:08
- Excel(エクセル) vba キータッチまたはマウスクリックの確認 1 2023/08/23 19:02
- バックアップ linuxのバックアップ 2 2022/04/27 13:38
- ノートパソコン Windows11搭載パソコン 新規購入にあたって 4 2022/11/09 18:11
- その他(プログラミング・Web制作) VScodeを終了し、次に起動した時、ディレクトリの場所がリセットされ、再度cdコマンドを使うのが面 2 2022/11/13 18:59
- その他(メールソフト・メールサービス) メールサーバーは「PC側がメールをDL済みか否か?」を何を以て感知するのか? 2 2022/12/20 14:56
- C言語・C++・C# exeファイルが作れない(windows10) 6 2022/08/13 08:47
- UNIX・Linux jsLinuxのコマンドについて。 aliasを使い、必ず削除前に確認メッセージを表示するコマンドを 1 2022/07/25 18:37
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
ttlで戻り値を取得する方法
-
コマンドプロンプトで表示が多...
-
別のユーザーフォームのコマン...
-
バッチファイルでキー操作を行う。
-
【Teratermマクロ】文字列の一...
-
ルーターにつながっている全て...
-
Lotus Notes R5 ...
-
Tera Term Proに関する質問です。
-
オススメの統計処理ソフトは?
-
arduinoを使ってBluetoothモジ...
-
telnetクライアントを模したプ...
-
テキストボックスが未入力のと...
-
エクセルのマクロ(visual basi...
-
C#でローカルユーザーやグルー...
-
PowerShell実行結果をデスクト...
-
コンボボックス(最終行取得)
-
system関数でのシェル起動について
-
コマンドプロンプトですべてのU...
-
VBSで異なる資格情報でNWドライ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
ttlで戻り値を取得する方法
-
Tera Term Proに関する質問です。
-
バッチファイルでキー操作を行う。
-
別のユーザーフォームのコマン...
-
VBA でshell関数を使ってコマン...
-
VBユーザーフォームで時間入力
-
【Teratermマクロ】文字列の一...
-
文字の点滅はどうやるのですか?
-
system関数でのシェル起動について
-
EEPROMのデータの初期化について
-
PowerShell実行結果をデスクト...
-
VBでDosコマンドを動かすには
-
ディスクの空き容量を取得する...
-
コンボボックス(最終行取得)
-
"伴われる"は正しい日本語ですか?
-
コマンドキーがないんですけど...
-
CreateProcessでの実行ファイル...
-
DOSコマンドでポートから受信
おすすめ情報