有人能指出我在这段代码中尝试做的事情,因为SecondLoop
线程根本无法访问吗?只有在我删除while(true)
循环时才能访问它。
#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;
}
我使用多线程的原因是因为我需要同时运行两个循环。
答案 0 :(得分:14)
join
阻止当前线程等待另一个线程完成。由于你的t1
永远不会完成,你的主线程会无限期地等待它。
<强> 编辑: 强>
要无限期地并发运行两个线程,首先创建线程,然后等待两者:
int main() {
thread t1(Loop);
thread t2(SecondLoop);
t1.join();
t2.join();
}
答案 1 :(得分:2)
要运行Loop
和SecondLoop
并发,您必须执行以下操作:
#include <iostream>
#include <thread>
void Loop() {
while(true) {
//(do something)
}
}
void SecondLoop() {
while(true) {
//(do something)
}
}
int main() {
std::thread t1(Loop);
std::thread t2(SecondLoop);
t1.join();
t2.join();
}
as join
阻止当前线程等待另一个线程完成。
答案 2 :(得分:0)
.join()等待线程结束(所以在这种情况下,如果你突破while循环并退出线程函数)
答案 3 :(得分:0)
使用while(true)链接到胎面运行,你应该寻找退出该循环的方法,使用某种循环控制
答案 4 :(得分:0)
根据我的评论以及@Nidhoegger的回答,我建议:
int main() {
thread t1(Loop);
thread t2(SecondLoop);
// Your 2 threads will run now in paralel
// ... <- So some other things with your application
// Now you want to close the app, perhaps all work is done or the user asked it to quit
// Notify threads to stop
t1running = false;
t2running = false;
// Wait for all threads to stop
t1.join();
t2.join();
// Exit program
return false;
}