私は別のスレッドで呼びたい関数に複数の引数を渡す必要があります。私はreadこれを行うための典型的な方法は、構造体を定義し、その関数にポインタを渡し、引数のために逆参照することです。pthread_create()が呼び出す関数への複数の引数?
#include <stdio.h>
#include <pthread.h>
struct arg_struct {
int arg1;
int arg2;
};
void *print_the_arguments(void *arguments)
{
struct arg_struct *args = (struct arg_struct *)args;
printf("%d\n", args -> arg1);
printf("%d\n", args -> arg2);
pthread_exit(NULL);
return NULL;
}
int main()
{
pthread_t some_thread;
struct arg_struct args;
args.arg1 = 5;
args.arg2 = 7;
if (pthread_create(&some_thread, NULL, &print_the_arguments, (void *)&args) != 0) {
printf("Uh-oh!\n");
return -1;
}
return pthread_join(some_thread, NULL); /* Wait until thread is finished */
}
このため、出力は次のようになります。:
5
7
をしかし、私はそれを実行したときに私が実際に取得する:しかし、私はこの作業を取得することができません
141921115
-1947974263
誰もが知っています私は間違っているの?
は、ヒープ上に割り当ててみてください? –
@カーソンなぜ違いがあるのでしょうか? – sigjuice
あなたの構造はあなたのスレッドと同じくらい長く生きていなければなりません。スレッドを作成し、pthread_create()を呼び出した関数から戻ると、スタックに割り当てられた構造体が他のデータによって上書きされ、スレッド関数に問題が発生する可能性があります。この例では、これは問題ではありません。作成スレッドは、ワーカースレッドが完了するのを待ってから、戻ります。 –