有和没有新行字符的睡眠行为

时间:2014-03-17 13:26:03

标签: c++ sleep

考虑下面的代码,其中有两个测试区域

在第一次测试中(测试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;
 }

2 个答案:

答案 0 :(得分:4)

当连接到终端std::cout时,行缓冲。您需要明确cout << flush;才能使每个*单独出现。

答案 1 :(得分:1)

关于你的第一个问题,cout不会立即冲洗。它所做的时间取决于许多因素,但在这种情况下,它看起来只有在看到换行符时才会刷新。如果要强制刷新,可以使用

cout << flush;
// or
cout.flush();

关于pthreads:默认情况下,您的编译器可能只包含所需的标头。