此设置
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。