此设置
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测试版。 根据标准,这里需要哪种行为?
答案 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。