मुझे एक फ़ंक्शन के लिए कई तर्क पास करने की आवश्यकता है जिसे मैं एक अलग थ्रेड पर कॉल करना चाहूंगा। मैंने पढ़ा है कि ऐसा करने का विशिष्ट तरीका एक संरचना को परिभाषित करना है, फ़ंक्शन को उस के लिए एक पॉइंटर पास करना है, और तर्कों के लिए इसे संक्षिप्त करना है। हालाँकि, मैं यह काम करने में असमर्थ हूँ:
#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
किसी को पता है कि मैं क्या गलत कर रहा हूँ?