• ベストアンサー

_beginthread関数の引数

VC++ 2005 Win32コンソールアプリケーション で 1つ目のスレッドで「10」 2つ目のスレッドで「20」 3つ目のスレッドで「30」 と出力するために下記のように記述しました。 結果は予定通り出力されているのですが、 _beginthreadの第3引数の渡し方、 printfの引数の表示の仕方はこれでよいのでしょうか? void myThread(void *pParam); int arg[3] = {10, 20, 30}; int main() {   HANDLE hThread[3];   int i;   for (i = 0; i < 3; i++)   {     hThread[i] = (HANDLE)_beginthread(myThread, 0, &arg[i]);   }   /* 以下略 */ } void myThread(void *pParam) {   printf("%d\n", *(int *)pParam);   _endthread(); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

    hThread[i] = (HANDLE)_beginthread(myThread, 0, arg[i]); と呼んで void myThread(void *pParam) {   printf("%d\n", (int)pParam);   _endthread(); } でも可。 要は「呼んでる方と呼ばれてる方の辻褄が合ってればOK」って事。

noname#251034
質問者

お礼

回答ありがとうございました。 参考にさせていただきます!

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • aris-wiz
  • ベストアンサー率38% (96/252)
回答No.3

> hThread[i] = (HANDLE)_beginthread(myThread, 0, arg[i]); > void myThread(void *pParam) > printf("%d\n", (int)pParam); 64ビット環境になったりするとポインタとintの 表現範囲は異なる為、つじつまが合ってません。 動いているのは、「たまたま」動く環境だったと いうだけでしょう。 # [Win32コンソールアプリケーションで]とあるので、 # 32ビット環境で動けば良いのかもしれませんが、 # 危険性がある以上は示唆しておくべきだと思います。 > hThread[i] = (HANDLE)_beginthread(myThread, 0, &arg[i]); > printf("%d\n", *(int *)pParam); ややこしいですが、一般的には質問者さんの コードのほうが正しいと思います。

noname#251034
質問者

お礼

回答ありがとうございました。 参考にさせていただきます!

すると、全ての回答が全文表示されます。
回答No.2

追記。 >    hThread[i] = (HANDLE)_beginthread(myThread, 0, arg[i]); >と呼んで     hThread[i] = (HANDLE)_beginthread(myThread, 0, (void *)(arg[i])); じゃないとワーニングが出る。

すると、全ての回答が全文表示されます。

関連するQ&A