Zum Inhalt springen

Argumente übergeben bei pthread_create


Kadaj

Empfohlene Beiträge

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:

#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 argc, char *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(&id, NULL, (void*) &thread_a, NULL);
// 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);
}
[/PHP]

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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.

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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ß

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...