C++ で記述された MFC アプリケーションを修正しています。これは GUI であり、USB 経由で PC に接続された外部モジュールと通信します。
別スレッドの使用は避けたい。イベントベースではなく継続的に実行されるように、メインループに何かを追加する方法はありますか?
メインループがすべてのループで関数 runCommStack() を呼び出すようにします。
C++ で記述された MFC アプリケーションを修正しています。これは GUI であり、USB 経由で PC に接続された外部モジュールと通信します。
別スレッドの使用は避けたい。イベントベースではなく継続的に実行されるように、メインループに何かを追加する方法はありますか?
メインループがすべてのループで関数 runCommStack() を呼び出すようにします。
メッセージ (キー、マウス、再描画など) が到着しない場合、メイン ループはプログラムを中断し、次のメッセージを待ちます。そのため、メイン ループに呼び出しを追加するというアイデアは、非常に不安定な動作をもたらします。たとえば、ウィンドウを最小化すると、すべての USB 通信が停止します。
SetTimer を使用し、WM_TIMER ハンドラーで runCommStack 関数を呼び出すと、おそらく満足のいく結果が得られます。
CWinApp::OnIdleでアイドル処理を使用できます。これは、USB デバイスの読み取りに短時間しかかからない場合に機能します。そうしないと、長時間の読み取り中にユーザー インターフェイスがブロックされます。
ただし、別のスレッドを使用する方が確実に優れた方法です。