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