- ベストアンサー
マルチスレッドについて
VC++を使用しています。 マルチスレッドの引数の使用法について教えてください。 int A; int B; AfxBeginThread((AFX_THREADPROC) ::WaitThread, (LPVOID)this); UINT WaitThread( LPVOID pParam ) { if(A == 0) { … } if(A == 1) { … } if(B == 0) { … } if(B == 1) { … } } のようなプログラムを作ろうとしています。 引数の受け渡し方法教えてください。 お願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
pParam 使わなくてもグローバルでもOKよん。 pParam を使うのは、スレッドごとに別のオブジェクトを渡したい場合で、全てのスレッドで共有する変数とかは別にグローバルでも問題ないっすよ。 問題は、変数A,Bの意味。意味によって使い分けるのが賢いよ。 余計なお世話だけど。たぶん、サンプルソースの延長線上にあるコードはバグを含むと思うよ。クリティカルセクションとかミューテックスとか調べた方がいいよ。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
#1の回答の通り、pParamで引数を渡すことになると思います。 ただ、pParamで単なる数値を渡すだけならよいのですが、ポインタの場合には、それが指す実体の寿命には十分気をつける必要があります。
pParam で渡すのが一般的だと思います。 struct MyParam { MyClass *inst; int a; int b; }; MyParam param; param.inst = this; param.a = 1; param.b = 2; AfxBeginThread((AFX_THREADPROC) ::WaitThread, (LPVOID)¶m);
お礼
返事遅くなってすいません。 参考にしてみます。 ありがとうございました。
お礼
グローバルでも試してみました。 作っているプログラムとしては、 こちらの方が使い勝手がよかったです。 ありがとうございました。