pthread_create erzeugt den Thread "joined"
-
Hallo Leute,
habe hier ein kleines Problem. pthread_create erzuegt einen thread, der seine Arbeit auch verrichtet. Das Problem ist das der Calling-Thread stehen bleibt.
Das sollte doch erste bei pthread_join passieren. Ich habe es auch im Terminal mit g++ probiert, aber der Fehler bleibt.
Kann mir jemand weiterhelfen?Hier der Code:
#include <stdio.h> #include <iostream> #include <pthread.h> using namespace std; void* work(void* data) { for(int i=0;i<1000;i++) { printf("hallo\n"); } return data; } int main() { pthread_t thread1; int result = pthread_create( &thread1, NULL, &work, NULL ); // bleibt stehen und printet 1000 mal hallo. dann weiter ?!?!?! if(result != 0) { printf("fehler"); } printf("----------------------------------------------------------------"); int input; cin >> input; return 0; }
-
Also das Programm läuft und tut auch was es soll, bei mir zumindest.
Es werden die Ausgaben gegeben, also deine 1000 hallos, dann irgendwann mal die linie und dann wartet er auf ne Eingabe.
Sobald der stehen bleibt gib ihm ne Zahl, Enter und fertig.Da du gar kein join hast, wird der thread auch nicht beendet, sondern schläft, bis das Programm zu Ende ist.
Sag doch nochmal ganz genau, was du meinst.
-
Hallo, danke für die Antwort. Mein Problem bei der Sache ist, das die 1000 Hallos
rausgeschrieben werden, und DANN ERST der Strich gezeichnet wird.
Auch wenn ich seperat Threads danach erzeuge, die einen anderen Text ausgeben, arbeitet er jeden Thread nacheinander ab. Da ist nichts mit parallel.
Die ausgabe sieht dann so aus:hallo
hallo
hallo
hallo
1000.wald
wald
wald
wald
1000.--------------------------
Dabei sollte sie durch threading so aussehen:
hallo
wald
hallo
---------------------------
hallo
wald wald
2000.Oder nicht?
gruß fab
-
bau doch mal ein schlafen für 100ms in deinen thread ein, ich denke dann hast du das erwünschte. 1000mal hallo gibt er vllt innerhalb einer zugeteilten zeitscheibe schon aus.
-
Das ist das lustige an Threads. Du weißt nie genau wann was passieren wird
Und auf keinen Fall wird das so gemixt aussehen, wie du erwartest, dazu sind die Rechenzeitfenster zu groß, bzw ein print zu schnellHast du ne Single-Core CPU?