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で質問しましょう!
似たような質問が見つかりました
- 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ランキング
-
バッチファイルでキー操作を行う。
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
C#でローカルユーザーやグルー...
-
UDP通信での受信方法について
-
ttlで戻り値を取得する方法
-
スレッド処理内での終了結果を...
-
RTX1100の削除コマンド
-
コマンドキーがないんですけど...
-
デフォルトのショートカットキ...
-
この画像のプログラムを出すコ...
-
コマンドプロンプトについて
-
数十マイクロ秒単位でスリープ...
-
jupyter notebookが開けません!
-
VBで郵便番号を入力したら自動...
-
【Teratermマクロ】文字列の一...
-
Linuxをファイヤーウォールとし...
-
TEXの表の位置が・・・
-
CPUには起動時に実行されたり、...
-
DOSコマンドについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
バッチファイルでキー操作を行う。
-
コマンドプロンプトが実行中か...
-
コマンドプロンプトで表示が多...
-
ttlで戻り値を取得する方法
-
VBユーザーフォームで時間入力
-
Tera Term Proに関する質問です。
-
別のユーザーフォームのコマン...
-
TEXの表の位置が・・・
-
RTX1100の削除コマンド
-
コンボボックス(最終行取得)
-
コマンドキーがないんですけど...
-
コマンドプロンプトですべてのU...
-
ルーターにつながっている全て...
-
文字の点滅はどうやるのですか?
-
アンドロイドでも、robocopyは...
-
jupyter notebookが開けません!
-
EEPROMのデータの初期化について
-
makeコマンドのエラー
-
シリアル通信でコマンドを送信...
-
system関数でのシェル起動について
おすすめ情報