为什么sleep()会阻止std :: ostream

时间:2015-12-31 23:14:10

标签: c++ concurrency sleep iostream

鉴于以下内容:

const char opn[8] = { 0x16, 'O', 'P', 'N', 0x17, 0xa8, 0xa9, '\0' };
std::cout << opn;
sleep(5);

该字符串仅在五秒后写入cout。预期的行为是将消息打印到cout,然后等待几秒钟。

为什么会这样?

1 个答案:

答案 0 :(得分:4)

默认情况下,

std::cout被缓冲,因此不会立即打印消息,而是仅在刷新std::cout的缓冲区时,即程序终止时。

使用

std::cout << opn << std::flush;

正如@RemyLebeau在对此答案的评论中所述,<< std::endl等同于<< '\n' << std::flush;并且还刷新了缓冲区。

此外,您缺少尾随的空字节,因此截至目前,您的程序仍未定义。