Wie verwende ich while true in threads?
Kann jemand Punkt mich bei der Sache ich versuche zu tun in diesem code, weil SecondLoop
thread ist nicht erreichbar, auf allen? Es wird erreichbar nur, wenn ich entfernen while(true)
Schleife.
#include <iostream>
#include <thread>
using namespace std;
void Loop() {
while(true) {
(do something)
}
}
void SecondLoop() {
while(true) {
(do something)
}
}
int main() {
thread t1(Loop);
t1.join();
thread t2(SecondLoop);
t2.join(); //THIS THREAD IS UNREACHABLE AT ALL!
return false;
}
Der Grund, warum ich mithilfe von multithreading ist, weil ich brauche, um die zwei Schleifen zur gleichen Zeit ausgeführt.
- Was meinst du mit nicht erreichbar?
t1.join()
immain()
wartet, bist1
's job ist getan (und da Sie verwenden, Endlosschleife, es wird nie gemacht werden, es sei denn, Sie habenbreak;
irgendwo drin). - Ihre ersten erstellten thread läuft auf einer nie endenden Schleife, so dass Ihr gesperrt sind
t1.join()
. Oder es fehlt etwas in Ihrem Skelett... Do you break die Schleifen? - Denken Sie daran, dass der Aufruf
join
wird blockiert, bis der thread, dem Sie beitreten beendet wurde. - NÖ, habe ich nicht. Ich denke, das ist das problem. Wie soll ich
break;
in den Schlaufen? - Joachim Pileborg, wie soll ich das schaffen-thread dann?
- Beachten Sie, dass ein thread, und dann direkt wartet bis es fertig ist nicht wirklich sehr hilfreich, als es nicht zu tun, die alle parallel arbeiten. Stattdessen beginnen die beiden threads, die möglicherweise tun einige Arbeit in den Haupt-thread, und schließlich Sie warten, bis die threads fertig zu stellen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
join
blockiert den aktuellen thread warten, bis ein anderer thread zu beenden. Da Ihrt1
nie abgeschlossen ist, werden Ihre Haupt-thread wartet, bis es auf unbestimmte Zeit.Edit:
Ausführen von zwei threads auf unbestimmte Zeit und Gleichzeitigkeit, erstellen Sie zuerst die threads, und dann warten für beide:
Laufen
Loop
undSecondLoop
Parallelität, die Sie haben, etwas zu tun:als
join
blockiert der aktuelle thread warten, der andere thread endet..join() wartet, bis der thread zu Ende (also in diesem Fall, wenn Sie brechen aus der while-Schleifen, und beenden Sie die thread-Funktion)
mit while(true) ist mit der Lauffläche läuft , sollten Sie sich für einen Weg zu verlassen, die Schleife, verwenden Sie irgendeine Art von Regelkreis
Basierend auf meinen Kommentar und was @Nidhoegger, antwortete ich schlage vor:
}