2014-09-19 197 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