[英]C++ calculating time intervals
我想計算程序中發生的某些事件之間的時間間隔(以1秒的1/10為單位)。 因此,我將clock
功能用於這些需求,如下所示:
clock_t begin;
clock_t now;
clock_t diff;
begin = clock();
while ( 1 )
{
now = clock();
diff = now - begin;
cout << diff / CLOCKS_PER_SEC << "\n";
//usleep ( 1000000 );
};
我期望程序打印0
1秒,然后1
1秒,則2
1秒。 依此類推...實際上,它打印0
約8秒,然后打印1
約8秒,依此類推...
順便說一句,如果我添加usleep
以使程序每秒僅打印1次,那么它一路只打印0
。
非常感謝您的幫助!
clock()
函數返回程序收取的CPU時間。 當您在usleep()
調用中被阻止時,無需花費任何時間,這很清楚為什么您的時間似乎從未增加。 至於為什么您似乎要花8秒才能充電一秒鍾-系統中發生了其他事情,這雖然消耗了CPU時間,但是您必須共享處理器。 clock()
不能用於衡量實時時間的流逝。
我敢打賭,您的打印內容太多了,以至於舊打印內容被緩沖了。 緩沖區正在增長,並且控制台的輸出跟不上您的緊密循環。 通過添加睡眠,您可以讓緩沖區有一些時間刷新並趕上。 因此,即使它進入程序的時間為8秒,您的打印內容還是8秒鍾前。
我建議將實際時間戳記放入print語句中。 查看時間戳是否與實際時間明顯滯后。
如果您可以使用boost,請檢查Boost Timers庫。
也許您必須將其轉換為兩倍。
cout << (double)(diff / CLOCKS_PER_SEC) << "\n";
整數取整,在您的情況下可能取整為0。
了解有關time()
函數的信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.