C ++ 11线程分离

时间:2012-03-13 21:17:26

标签: c++ multithreading c++11

此设置

void run()
{
    while (true)
    {
        std::cout << "Hello, Thread!\n";
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

void foo()
{
    std::thread t(run);
    t.detach();
    //std::this_thread::sleep_for(std::chrono::seconds(3));
}

int main()
{
    foo();
    getchar();
}

给我输出直到我按回车键(getchar返回并且程序结束,但我可以看到输出一会儿)。但是,当使用foo中的out注释行时,输出将直接显示。 (即使在foo返回之后。)我正在使用VS11测试版。 根据标准,这里需要哪种行为?

3 个答案:

答案 0 :(得分:4)

"\n"不会刷新输出缓冲区。您需要使用std::endl代替冲洗缓冲区。

void run()
{
    while (true)
    {
        std::cout << "Hello, Thread!"<<std::endl;
        std::this_thread::sleep_for(std::chrono::seconds(1));
    }
}

答案 1 :(得分:3)

您可以尝试使用std::flush手动刷新cout缓冲区

答案 2 :(得分:-5)

我认为这是因为你使用的是std :: cout,它是缓冲的。尝试使用std :: cerr。