2010-05-26 20 views
0

我需要一個真正的時鐘在ansi c提供一個精度高達毫秒?我需要一個真正的時間在ansi c提供一個精度高達毫秒?

我在windows上工作的一個windows base lib也是可以接受thanx的。

+0

[How to measure time in milliseconds using ANSI C?](http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c) – WhirlWind 2010-05-26 15:52:58

+0

不知道如何讓超鏈接在評論中工作,或者我會在這裏提供我的「答案」。 – 2010-05-26 15:56:47

+0

@Michael我投票結束;它會自動完成。 – WhirlWind 2010-05-26 15:57:20

回答

0

你不能使用便攜式代碼。

由於您使用的是Windows,因此您需要開始意識到Windows不是實時系統,因此您所做的任何事情都無法保證準確無誤。也就是說,您可以從timeBeginPeriod(1);開始將多媒體計時器分辨率設置爲1毫秒。然後您可以撥打timeGetTime()以1毫秒的分辨率檢索當前時間。完成計時後,您可撥打timeEndPeriod(1)將計時器分辨率恢復爲默認值。

1

在ANSI C中,您無法確定底層系統在幾毫秒內提供準確性。然而,爲了達到最大的細節,你可以使用clock()函數返回因爲蜱進程啓動,其中一個刻度的持續時間由CLOCKS_PER_SEC定義的時間:

#include <time.h> 

double elapsed; // in milliseconds 
clock_t start, end; 

start = clock(); 

/* do some work */ 

end = clock(); 
elapsed = ((double) (end - start) * 1000)/CLOCKS_PER_SEC; 

從GNU的documentation

+0

'clock()'返回處理器時間,而不是掛鐘時間。 – caf 2010-05-27 00:01:08

+0

我知道這一點。這在我的回答中暗示「自啓動以來」。這個問題沒有說明掛鐘時間是否是一項要求。 – Tomas 2010-05-27 08:52:49

0

ANSI C時鐘()會給你精度毫秒,但不是準確度,因爲這取決於窗口的系統時鐘,其準確度爲50毫秒或在該範圍的某處。如果你需要一些更好的東西,那麼你可以使用Windows API QueryPerformanceCounter,它也有其自己的注意事項。

相關問題