函数调用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 

任何人都知道我在做什么错了?

因为你说

struct arg_struct *args = (struct arg_struct *)args;

代替

struct arg_struct *args = arguments;

使用

 struct arg_struct *args = (struct arg_struct *)arguments; 

代替

 struct arg_struct *args = (struct arg_struct *)args; 

main()有它自己的线程和堆栈variables。 要么为堆中的“args”分配内存,要么将内存全局化:

 struct arg_struct { int arg1; int arg2; }args; //declares args as global out of main() 

那么当然,将args->arg1的引用更改为args.arg1等。

使用:

 struct arg_struct *args = malloc(sizeof(struct arg_struct)); 

并传递这样的论点:

 pthread_create(&tr, NULL, print_the_arguments, (void *)args); 

不要忘记免费参数! ;)

print_the_arguments的参数是参数,所以你应该使用:

 struct arg_struct *args = (struct arg_struct *)arguments.