0

C++ で記述された MFC アプリケーションを修正しています。これは GUI であり、USB 経由で PC に接続された外部モジュールと通信します。

別スレッドの使用は避けたい。イベントベースではなく継続的に実行されるように、メインループに何かを追加する方法はありますか?

メインループがすべてのループで関数 runCommStack() を呼び出すようにします。

4

3 に答える 3

1

メッセージ (キー、マウス、再描画など) が到着しない場合、メイン ループはプログラムを中断し、次のメッセージを待ちます。そのため、メイン ループに呼び出しを追加するというアイデアは、非常に不安定な動作をもたらします。たとえば、ウィンドウを最小化すると、すべての USB 通信が停止します。

SetTimer を使用し、WM_TIMER ハンドラーで runCommStack 関数を呼び出すと、おそらく満足のいく結果が得られます。

于 2013-08-14T13:29:59.433 に答える
0

CWinApp::OnIdleでアイドル処理を使用できます。これは、USB デバイスの読み取りに短時間しかかからない場合に機能します。そうしないと、長時間の読み取り中にユーザー インターフェイスがブロックされます。

ただし、別のスレッドを使用する方が確実に優れた方法です。

于 2013-08-14T10:07:14.777 に答える