Ayrı bir iş parçacığında çağırmak istediğim bir işleve birden çok argüman iletmem gerekiyor. Ya sahibim yapmanın tipik yolunun bir yapı tanımlamak, işleve buna bir işaretçi geçirmek ve argümanlar için ondan referans almak olduğunu okudum . Ancak, bunu çalıştıramıyorum:
#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 */
}
Bunun çıktısı şöyle olmalıdır:
5
7
Ama çalıştırdığımda aslında şunu elde ederim:
141921115
-1947974263
Neyi yanlış yaptığımı bilen var mı?