+ Antworten
Ergebnis 1 bis 6 von 6

Argumente übergeben bei pthread_create

Diskussion über Argumente übergeben bei pthread_create in C und C++ der Kategorie Programmierung; Guten Abend, ich versuche mich grade an pthreads. Ich finde die Syntax recht eigenartig muss ich sagen. Das erstellen eines ...

  1. #1
    Reg.-Benutzer
    Reg.-Datum
    17.06.2010
    Ort
    Dresden
    Beiträge
    63

    Beitrag Argumente übergeben bei pthread_create

    Guten Abend,

    ich versuche mich grade an pthreads. Ich finde die Syntax recht eigenartig muss ich sagen. Das erstellen eines threads funktioniert soweit. Nun möchte ich aber mein argv[1] an meinen erstellten thread übergeben und ausgeben lassen und dieser thread soll wieder irgednwas zurückgeben an das Hauptprogramm. In der man-page steht, dass ich dazu pthread_attr_init brauche und die Adresse als Argument an die Funktion pthread_create übergebe, nur ist der Beispielcode in der man-page echt gewaltig und ich kann nicht ganz nachvollziehen was sort passiert, bzw. verstehe ich es teilweise nicht. Wie kann ich beispielsweise meinen string aus argv[1] an meinen thread übergeben? Ich habe außerdem die Stellen, die mir etwas schleierhaft sind, mit Kommentaren versehen. Hier erstmal mein code:

    PHP-Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <pthread.h>

    //#define MAXITER 200000                     //wozu ist das gut?

    void *thread_a(void *arg)
    {
        
    printf(" World!\n");
        
    pthread_exit(NULL);
    }

    int main(int argcchar *argv[])
    {
        
    pthread_t id;
        
    pthread_attr_t atr;
        
    int ret;

        if(
    argc!=2)
        {
            
    fprintf(stdout,"Error: parameter number\n");
            exit(
    EXIT_FAILURE);
        }

        
    pthread_attr_init(&atr);                     // das scheint mir recht überflüssig, da mein atr doch bereits
                                                             // vom typ pthread_attr_t ist...warum initialisieren, wenn ich es
                                                            // ohnehin nur erstelle um es als Parameter zu übergeben?
        
    printf("Hello,");

        
    ret pthread_create(&idNULL, (void*) &thread_aNULL);  
                                                               
    // immer (void*), oder hängt es vom thread ab?

        
    if(ret!=0)
        {
            
    perror("creating 1st thread");
            exit(
    EXIT_FAILURE);
        }

        
    pthread_join(id,NULL);
        exit(
    EXIT_SUCCESS);

    Vielleicht hat ja jemand den Elan sich das mal anzusehen. Am wichtigsten wäre mir zu wissen, wie ich meinen string in den thread bekomme. Danke im voraus!

    Gruß, Steven
    Das Ideal scheitert an der Wirklichkeit

  2. #2
    Reg.-Benutzer
    Reg.-Datum
    08.01.2012
    Beiträge
    111

    Standard

    der letzte Parameter von pthread_create wird an die thread-routine übergeben.

  3. #3
    Reg.-Benutzer
    Reg.-Datum
    17.06.2010
    Ort
    Dresden
    Beiträge
    63

    Frage

    Ich versteh nicht ganz, was du damit sagen willst. Alle Parameter, die in Klammern stehen, werden an eine Funktion übergeben. Abgesehen davon ist der letzte Parameter bei mir ohnehin NULL.

    Gruß
    Das Ideal scheitert an der Wirklichkeit

  4. #4
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Mit pthread_attr bist du da auf dem Holzweg, keine Ahnung, woher du die Idee hast.

    Zitat Zitat von Kadaj Beitrag anzeigen
    Alle Parameter, die in Klammern stehen, werden an eine Funktion übergeben.
    Alle Parameter werden an pthread_create übergeben. Aber nur der letzte landet in deiner Threadfunktion. Du hast ihn dort arg genannt.

    Zitat Zitat von Kadaj Beitrag anzeigen
    Abgesehen davon ist der letzte Parameter bei mir ohnehin NULL.
    Dann kommt eben NULL in deiner Threadfunktion an, das ist aber nicht besonders nützlich, wenn du Daten mit dem Thread austauschen willst.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

  5. #5
    Reg.-Benutzer
    Reg.-Datum
    17.06.2010
    Ort
    Dresden
    Beiträge
    63

    Standard

    Achso war das gemeint. Ich hatte nicht verstanden, dass du den Parameter damit meintest, metux. pthread_attr hatte ich aus dem Beispiel in der man-page genommen. Das war sehr verwirrend, daher hab ich da nicht ganz durchgesehen. Mein Prof hatte mir heut auch nochmal erzählt, dass das letzte Argument als Pointer an die Funktion übergeben wird... nur warum vom Typ void und nicht vom Typ char? (siehe man-page) Dass der dritte Parameter als void* übergeben wird, sehe ich ja noch ein, aber warum auch als Parameter? char wäre doch auch nicht unlogisch, oder?

    Gruß
    Das Ideal scheitert an der Wirklichkeit

  6. #6
    Administrator + Moderator
    C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
    Avatar von Klotzkopp
    Reg.-Datum
    10.07.2001
    Ort
    Essen
    Beiträge
    8.980

    Standard

    Jeder Zeiger ist (in C) implizit in void* konvertierbar. void* ist in C sozusagen der generische Datentyp. Er signalisiert, dass man da alles reintun kann, was man will, dass man dafür aber auch selbst verantwortlich ist.

    Ein char*-Parameter signalisiert etwas ganz anderes. Zudem müsste man dann casten, sobald man etwas anderes übergeben will.
    "Funktioniert nicht" ist keine ausreichende Problembeschreibung.

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. Argumente für IT Weiterbildung zum IT-Spezialisten ...
    Von MarkusLe im Forum Ausbildung im IT-Bereich
    Antworten: 15
    Letzter Beitrag: 18.05.2007, 08:28
  2. [VB6] Argumente an anderes Formular übergeben?
    Von MasterEvil im Forum Basic
    Antworten: 0
    Letzter Beitrag: 18.08.2005, 09:34
  3. Argumente optional
    Von Technician im Forum Linux + Unix
    Antworten: 1
    Letzter Beitrag: 22.11.2002, 15:23
  4. Argumente gegen Prüfung
    Von 4Wheeler im Forum IHK-Prüfung allgemein
    Antworten: 12
    Letzter Beitrag: 26.05.2002, 01:01
  5. Argumente Citrix vs. Terminalserver
    Von Beagol im Forum Windows Betriebssysteme
    Antworten: 6
    Letzter Beitrag: 08.05.2002, 09:51

Die häufigsten Suchbegriffe für diese Seite:

Bisher noch keine Treffer von einer Suchmaschine