2014-09-19 128 views
-2

在C++中,我在我的“主”路径中使用了usleep,之前调用了函数out睡眠和睡眠开始错误

out(); 
usleep(4000000); 

out只是在屏幕上打印一些东西。不幸的是打印出现在屏幕上只有4秒后,尽管out()函数调用在usleep命令之前。我和raspbian一起在树莓上工作。怎么可能不是第一个功能out();被称为,然后usleep开始,但其他方式?

+2

这将有助于了解out()的作用。 – Galik 2014-09-19 11:19:49

+4

你可能需要在'out()'中刷新你的输出缓冲区。 – 2014-09-19 11:20:34

回答

3

在C++中为了减少IO的时间我们有缓冲输出。这意味着,写入屏幕/磁盘的调用并不总是写入真实设备。

让我们举个例子的代码:

for (int x = 0; x < 10000; x++) 
    std::cout << "a"; 

如果“A”将每次写入到屏幕上,它需要很长的时间。相反,整个缓冲区每n个字符写入一次。

为了非全缓冲写入到屏幕上,你有几种选择:

使用std ::冲洗是这样的:

std::cout << std::flush; 

的std :: ENDL也使用冲洗:

std::cout << std::endl; 
+0

太棒了,工作,非常感谢:-)我有与命令outfile.write(缓冲区,10)相同的问题;有没有像这样的冲洗呢? – 2014-09-19 14:34:42

+0

'outfile.sync()' – 2014-09-19 14:38:12

+0

发现它的工作方式与flush相同,非常感谢,我一个人试了几个小时...... :-)!这是它如何工作:而不是outfile.write(缓冲区,10)我使用:string buffer =“test”; outfile << buffer << flush; – 2014-09-19 14:42:29