pthread_join () Frage
-
Hallo, hab mal ne Frage.
Wie müßte der 2. Parameter aussehen, dem man bei pthread_join () übergeben will.
Also ich meine nicht NULL. Hab damit meine Sorgen. Finde (Forum, Google) immer nur NULL als 2. Parameter außer:
http://www.pronix.de/pronix-242.htmlAber bei dem Beispiel klappts auch nicht recht. Die pthread_create () hab ich schon so geändert das es mit g++ zum compelieren geht. Aber beim join fällt mir nix mehr ein. Erwartet wird void**. Hmmm.... Wer kann mir da helfen?
MfG
-
man: pthread_join sagt:
On return from a successful pthread_join() call with a non-NULL value_ptr
argument, the value passed to pthread_exit() by the terminating thread is
stored in the location referenced by value_ptr. When a pthread_join()
returns successfully, the target thread has been terminated. The results
of multiple simultaneous calls to pthread_join() specifying the same tar-
get thread are undefined. If the thread calling pthread_join() is can-
celled, then the target thread is not detached.(und pthread_exit() gibt einen void* zurück, der die Rückgabewerte der Threadfunktion beschreibt)
Also mußt du ihm auch die Adresse eines void* übergeben:
void* ret; pthread_join(thread_id,&ret); //wie du ret jetzt weiter interpretieren mußt, hängt von dir ab - normalerweise müsstest du es auf einen passenden Typ casten
-
So habs jetzt. Was du schreibst war ja nicht das Problem.
Hab nen int []
int ret[MAX_THREADS];
und beim join() hat er immer nen Fehler gemacht
pthread_join (th[i], &ret[i]);
ich bin da bald ausgerastet, hab ja alles probiert aber das was jetzt folgt natürlich nicht
pthread_join (th[i], (void**) &ret[i]);
Einfach gecastet!
Aber trotzdem danke für die schnelle Antwort.MfG
-
Wobei ich - anstatt mühsam (und fehelranfällig) zu casten - lieber gleich den richtigen Datentyp verwenden würde, also
void* ret[MAX_THREADS]
.
-
aber dann musste z.b. für die ausgabe wieder auf int zurück, oder so, der cast bleibt dir nicht erspart