• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:(マルチスレッド)_beginthreadexに複数の引数を渡す)

(マルチスレッド)_beginthreadexに複数の引数を渡す

このQ&Aのポイント
  • マルチスレッドの関数に複数の引数を渡すことは可能でしょうか?
  • _beginthreadex関数の4番目のNULLのところに引数リストを指定できるとあったのですが、その意味が良くわかりませんでした。
  • 以下のプログラムの場合にマルチスレッドに変数a, b, cを引数として渡したい場合はどのように書けばいいのでしょうか?

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

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.3

★アドバイス ・過去に似たような質問がありました。  http://oshiete1.goo.ne.jp/qa2916783.html→『マルチスレッドについて』  ↑これは _beginthread ですが引数の渡し方は同じです。 ・http://www.kumei.ne.jp/c_lang/sdk/sdk_87.htm→『第87章 マルチスレッド その1』 ・http://www.kumei.ne.jp/c_lang/sdk/sdk_88.htm→『第88章 マルチスレッド その2』 ・http://www.kumei.ne.jp/c_lang/sdk/sdk_89.htm→『第89章 マルチスレッド その3』 ・http://www.kumei.ne.jp/c_lang/intro/no_99.htm→『99章 マルチスレッド その1』  ↑質問のソースは、ここと同じですね。 サンプル: #include <stdio.h> #include <windows.h> #include <process.h> // 渡したいすべての引数の構造体を宣言(自由に) typedef struct {  int a;  int b;  int c; } PARAM, *lpPARAM; // スレッド側 unsigned WINAPI MyThread( void *lpx ) {  lpPARAM lpParam = (lpPARAM)lpx; ←ここで構造体を受け取る    for ( ; ; ){   printf( "スレッド実行中\n" );   printf( "a = %d\n", lpParam->a );   printf( "b = %d\n", lpParam->b );   printf( "c = %d\n", lpParam->c );   Sleep( 1000 );  }  return 0; } // メイン側 int main( void ) {  HANDLE hThread;  DWORD thID; // スレッドIDの宣言  PARAM param;    // 渡したいすべての引数を構造体にセット  param.a = 128; ←引数a  param.b = 256; ←引数b  param.c = 512; ←引数c    // マルチスレッドの開始  hThread = beginthreadex( NULL, 0, MyThread, &param, 0, (unsigned int*)&thID ); ←構造体を渡す   :  処理(メイン関数実行中)   :  CloseHandle( hThread );  return 0; }

amazontester
質問者

お礼

なかなかお礼ができなくて申し訳ありません。 とても助かりました。

その他の回答 (3)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.4

既に回答付いていますが… 構造体に入れてポインタを渡すのがよく取られる方法です。 なお、渡す場合にはその構造体の寿命(というか、呼び出し側での構造体の寿命)に注意が必要です。 ローカル変数使う場合は…ですが。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

ボケるわけではありませんが、特定環境に依存した質問の場合は、環境を明らかにしましょう。 そもそもMSDNで調べること自体が間違っている可能性もあるわけですから。

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

最も簡単な方法は、a,b,cをメンバに持つ構造体を定義し その構造体のポインタを渡すことで可能です。 データ構造さえ自分で作る気があれば他の方法もとれますが、 これが一番安全だと思います。

関連するQ&A