Thread erzeugt keine Ausgabe
-
Hallo!
Ich brauche für ein Programm Threads (fork-Prozesse sollen die Threads nicht ersetzen!). Egal, wie ich es anstelle, mir wird keine Fehlermeldung beim Compilieren ausgegeben, aber der Thread tut trotzdem nichts:
#include <pthread.h> #include <iostream> #include <unistd.h> #include <stdio.h> using namespace std; void *ausgabe(void* wert) { cout << "Ausgabe vom Thread aus." << endl; return 0; } int main () { pthread_t thread1; int rc; int zahl=10; int* pzahl=&zahl; cout << "Main: Zahl hat den Wert: " << *pzahl << endl; rc=pthread_create(&thread1,NULL,ausgabe,(void *) pzahl); pthread_exit(NULL); }
Auf dem Server läuft Linux Debian und kompilieren tue ich das Programm mit
g++ -lpthread -o test test.ccIm Putty wird zwar die Ausgabe von Main ausgegeben, aber egal ob in der Threadfunktion "ausgabe" ein Satz ausgegeben werden soll, in eine Datei geschrieben werden soll oder sonstwas, es passiert nix...
Danke schonmal für Hilfe, viele Grüße,
Marc
-
Vermutlich kommt dein Thread gar nicht erst zur Ausführung, weil vorher deine main-Funktion (und damit dein ganzes Programm) endet.
-
Hi!
Danke für deine Antwort, das wars tatsächlich!
Ich bin noch relativ neu in C++, aber auf die vielen Beispielprogramme in Tutorials kann man sich scheinbar nicht verlassen... Ja, du hast Recht, ein sleep(1) am Ende und schon funzt es
Danke nochmal!
Liebe Grüße, Marc
-
du solltest auch mal nach "join" suchen, dann wartet er bis der
Thread fertig ist...
-
meines Wissens nach wartet
pthread_exit(NULL);
zum Beispiel bis alle Threads beendet sind...
Allerdings sollte man für diese Anwendung dann auch nichtreturn 0;
in den Thread-Funktionen verwenden, sondern in allen Thread-Funktionen ebenfalls
pthread_exit(NULL);
Bei
pthread_join();
wird ebenfalls der Wert, welcher bei pthread_exit() angegeben wird als Rückgabewert herangezogen, da bringt ein return 0 eigentlich nix...
also aus deiner Funktionvoid *ausgabe(void* wert) { cout << "Ausgabe vom Thread aus." << endl; return 0; }
wird
void *ausgabe(void* wert) { cout << "Ausgabe vom Thread aus." << endl; pthread_exit(NULL); }
Das sollte eigentlich das Problem aus der Welt schaffen