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:
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!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 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);
}
Gruß, Steven
+ 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 ...
- 27.01.2012 00:27 #1Reg.-Benutzer
- Reg.-Datum
- 17.06.2010
- Ort
- Dresden
- Beiträge
- 63
Argumente übergeben bei pthread_create
Das Ideal scheitert an der Wirklichkeit
- 30.01.2012 09:42 #2Reg.-Benutzer
- Reg.-Datum
- 08.01.2012
- Beiträge
- 111
der letzte Parameter von pthread_create wird an die thread-routine übergeben.
- 30.01.2012 21:37 #3Reg.-Benutzer
- Reg.-Datum
- 17.06.2010
- Ort
- Dresden
- Beiträge
- 63
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
- 30.01.2012 22:19 #4
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 8.980
Mit pthread_attr bist du da auf dem Holzweg, keine Ahnung, woher du die Idee hast.
Alle Parameter werden an pthread_create übergeben. Aber nur der letzte landet in deiner Threadfunktion. Du hast ihn dort arg genannt.
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.
- 31.01.2012 22:58 #5Reg.-Benutzer
- Reg.-Datum
- 17.06.2010
- Ort
- Dresden
- Beiträge
- 63
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
- 31.01.2012 23:11 #6
Administrator + Moderator
C++: Compiler, IDEs, APIs / C und C++, Algorithmik, Basic, Sonstige, .NET
- Reg.-Datum
- 10.07.2001
- Ort
- Essen
- Beiträge
- 8.980
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
-
Argumente für IT Weiterbildung zum IT-Spezialisten ...
Von MarkusLe im Forum Ausbildung im IT-BereichAntworten: 15Letzter Beitrag: 18.05.2007, 08:28 -
[VB6] Argumente an anderes Formular übergeben?
Von MasterEvil im Forum BasicAntworten: 0Letzter Beitrag: 18.08.2005, 09:34 -
Argumente optional
Von Technician im Forum Linux + UnixAntworten: 1Letzter Beitrag: 22.11.2002, 15:23 -
Argumente gegen Prüfung
Von 4Wheeler im Forum IHK-Prüfung allgemeinAntworten: 12Letzter Beitrag: 26.05.2002, 01:01 -
Argumente Citrix vs. Terminalserver
Von Beagol im Forum Windows BetriebssystemeAntworten: 6Letzter Beitrag: 08.05.2002, 09:51
Die häufigsten Suchbegriffe für diese Seite:
Bisher noch keine Treffer von einer Suchmaschine

LinkBack URL
About LinkBacks
Zitieren