我有一个非常简单的程序,它使用cout打印行并在每行之后休眠。对于大约7次迭代,一切都很好,因为缓冲区在任何时候都没有被刷新。之后,我假设只有缓冲区的一部分在每次迭代时刷新。
我对此行为有几个疑问:
将完全相同数量的字符作为行长度刷新到输出中,或者是基于行尾分隔符(如'\ n')内部刷新的cout缓冲区,这只是巧合吗?
int main(){
for(int i = 0; i < 100; ++i){
std::cout << "This is line " << i << '\n';
Sleep(1000);
}
return 0;
}
答案 0 :(得分:0)
您似乎假设缓冲区在填满之前不会被写入。可能会发生的是,异步写入只需一个输出字节即可启动。空缓冲区空间用于在异步写入进行时接收字符。当前写入完成时,如果/当缓冲区中有其他字符时,将启动新的异步写入。如果缓冲区已满,该过程只需要阻止写入。