Ich versuche, die Thread-ID über eine Struktur zu senden, weil ich später mehrere Argumente senden müssen. Wenn ich data-> arg1 = t, und versuche, Daten über zu senden, dann speichern Sie die Thread-ID in der PrintHello-Funktion, ich bekomme Werte, die ich nicht sollte. Wenn ich meine Struktur alle zusammen herausnehmen und t einfach von selbst senden, funktioniert das Programm wie erwartet. Weiß jemand, warum das sein könnte?Senden von Pthread mit mehreren Argumenten
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <strings.h>
#include <pthread.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
struct data *someData = threadid;
long threadsID = someData->arg1;
sleep(2);
printf("Thread %ld\n", threadsID);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
pthread_attr_t attr;
struct myStruct data;
long t;
void *status;
for(t=0; t<NUM_THREADS; t++){
data.arg1 = t;
pthread_create(&threads[t], &attr, PrintHello, (void *)&data);
}
pthread_attr_destroy(&attr);
for (t=0; t < NUM_THREADS; t++) {
pthread_join(threads[t], &status);
}
pthread_exit(NULL);
}
Ich deklarierte die Struktur in einer separaten Header-Datei.