考虑下面的代码,其中有两个测试区域
在第一次测试中(测试1 ::没有新线),编程的睡眠时间为10秒(5 * 2)。但所有5 *打印的only after the 10 seconds finished.
在第二次测试中(测试2 ::使用新线),编程按照给定的10秒(5 * 2)进行测试。但每两秒睡一次就会打印出来。
这背后的逻辑是什么?
Compiler:g++
platform:UNIX
此外,
我学习睡眠不是标准库的一部分?我们需要使用pthread.h如果没有包含pthread.h,那么这里的睡眠如何为我工作
#include<iostream>
int main()
{
using namespace std;
// Test 1 :: without new line
for(int i=0;i<5;i++)
{
sleep(2);
cout<<"*";
}
cout<<"\n";
// Test 2 :: with new line
for(int i=0;i<5;i++)
{
sleep(2);
cout<<"#\n";
}
return 0;
}
答案 0 :(得分:4)
当连接到终端std::cout
时,行缓冲。您需要明确cout << flush;
才能使每个*
单独出现。
答案 1 :(得分:1)
关于你的第一个问题,cout不会立即冲洗。它所做的时间取决于许多因素,但在这种情况下,它看起来只有在看到换行符时才会刷新。如果要强制刷新,可以使用
cout << flush;
// or
cout.flush();
关于pthreads:默认情况下,您的编译器可能只包含所需的标头。