- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MFCマルチスレッドについて)
MFCマルチスレッドについて
このQ&Aのポイント
- COMやIOボードからの入力に応じて動作するアプリを作成しています。AfxBeginThreadにてワーカスレッドを作成し、制御関数内でメンバ関数を実行しています。
- AfxBeginThreadにて*thisを送り、制御関数内で親スレッドのクラスのメンバ関数を実行しています。
- 表示部分の処理はクリティカルセクションにしていますが、実際の動作についてわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>AfxBeginThreadにて*thisを送り、制御関数内で、mycls->OnButton***()というような 感じで現在は作っています。 この方法なら、 「親スレッドのクラスのメンバ関数を制御関数が動いている子スレッドで実行しているだけ」 になります。 ここで問題になりそうなのは、 1.同じ関数を別々のスレッドが実行することになるので、同期処理が必要になるかもしれない。 2.親スレッドがウィンドウプロシ-ジャを実行している場合、子スレッドからは親スレッド所有のウィンドウ操作を行うことはできない。 1に関してはクリティカルセクションで保護しているようなのでよさそうですが、2に関しては、親スレッドがウィンドウを所有している上に再度表示をしなおすということなので、問題になるかもしれません。 表示に関わるコードがある場合は、その部分をメッセージハンドラとして実装し、子スレッドから#1さんが挙げているSendMessage、PostMessageなどを利用して親スレッドに実行させる方がよいかと思います。
その他の回答 (1)
- koi1234
- ベストアンサー率53% (1866/3459)
回答No.1
SendMessageやPostMessageなどでボタンクリックイベントなどを飛ばしているなら 処理されるのはメインのスレッドになりますが 質問のように直にメンバー関数読んでいるのであれば 実行はそのスレッド内で行われるはずです
補足
皆さんありがとうございます。 ネットで探してみると、 http://www.wit-systems.co.jp/MultiTh01.htm のようなページもありやはりメッセージで処理したほうが良さそうでしたので 組み替えて今のところ何も起こらず動いています。 ありがとうございました。