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测试版。根据标准,这里需要什么行为?

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

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

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

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

最新更新