Несколько аргументов для функции, вызываемой 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("%dn", args -> arg1);
printf("%dn", 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
кто-нибудь знает что я делаю неправильно?
5 ответов:
потому что ты говоришь
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()
имеет свои собственные переменные потока и стека. либо выделите память для "args" в куче, либо сделайте ее глобальной:struct arg_struct { int arg1; int arg2; }args; //declares args as global out of main()
тогда, конечно, измените ссылки с
args->arg1
доargs.arg1
etc..