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.html

    Aber 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


Anmelden zum Antworten