如何在线程中使用true?

时间:2015-10-30 08:19:29

标签: c++ multithreading c++11

有人能指出我在这段代码中尝试做的事情,因为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;
}

我使用多线程的原因是因为我需要同时运行两个循环。

5 个答案:

答案 0 :(得分:14)

join阻止当前线程等待另一个线程完成。由于你的t1永远不会完成,你的主线程会无限期地等待它。

<强> 编辑:

要无限期地并发运行两个线程,首先创建线程,然后等待两者:

int main() {
    thread t1(Loop);
    thread t2(SecondLoop);

    t1.join();
    t2.join();
}

答案 1 :(得分:2)

要运行LoopSecondLoop并发,您必须执行以下操作:

#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;

}