3

pthread_createのマニュアルページによると、関数の引数は次のとおりです。

int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
                      void *(*start_routine) (void *), void *arg);

voidに関しては*arg、私が作成する関数には2つの引数が必要なので、複数の引数を渡すことができるかどうか疑問に思います。

4

3 に答える 3

4

yourvoid*を使用すると、選択した構造体を渡すことができます。

struct my_args {
  int arg1;
  double arg2;
};

これにより、実質的に任意の引数を渡すことができます。スレッド開始ルーチンは、それらをアンパックして実際のスレッド開始ルーチンを呼び出す以外に何もできません (それ自体がその構造体から来る可能性があります)。

于 2013-03-06T22:51:58.363 に答える
1

構造体を作成し、関数を書き直して1つの引数のみを取り、構造体内で両方の引数を渡します。

それ以外の

thread_start(int a, int b) {

使用する

typedef struct ts_args {
   int a;
   int b;
} ts_args;

thread_start(ts_args *args) {
于 2013-03-06T22:53:16.240 に答える
1

構造体とを使用しmallocます。例えば

struct 
{
   int x;
   int y;
   char str[10];
} args;

args_for_thread = malloc(sizeof(args));

args_for_thread->x = 5;

... etc

次にargs_for_thread、のargs引数として使用しますpthread_create(void*からargs*へのキャストを使用します)。メモリを解放するのはそのスレッド次第です。

于 2013-03-06T22:53:32.200 に答える