2012-04-11 204 views
6

Java的System.currentTimeMillis()在C中的等價性是什麼?獲取C中的當前時間(以毫秒爲單位)?

+4

什麼操作系統? – 2012-04-11 00:48:52

+1

請參閱http://stackoverflow.com/questions/5303751/current-microsecond-time-in-c。那裏的答案很好。 – netcoder 2012-04-11 00:57:10

+1

的可能的複製[如何衡量使用ANSI C的毫秒時間?(http://stackoverflow.com/questions/361363/how-to-measure-time-in-milliseconds-using-ansi-c) – 2016-03-18 22:50:35

回答

2

檢查time.h,或許有點像gettimeofday()功能。

你可以做這樣的事情

struct timeval now; 
gettimeofday(&now, NULL); 

然後你就可以從now.tv_secnow.tv_usec獲取值提取時間。

+1

,但 2016-03-23 07:59:23

1

還有的time()功能,但它返回秒,不毫秒。如果您需要更高的精度,則可以使用Windows'GetSystemTimeAsFileTime()或* nix的gettimeofday()等特定於平臺的功能。

如果你不真正關心的日期和時間,但只是想不想來一次兩個事件之間的時間間隔,就像這樣:

long time1 = System.currentTimeMillis(); 
// ... do something that takes a while ... 
long time2 = System.currentTimeMillis(); 
long elapsedMS = time2 - time1; 

那麼C相當於是clock()。在Windows上,爲此使用GetTickCount()更爲常見。

3

在Linux和其他類Unix系統,你應該使用clock_gettime(CLOCK_MONOTONIC)。如果不可用(例如Linux 2.4),則可以回退到gettimeofday()。後者的缺點是受時鐘調整的影響。

在Windows上,你可以使用QueryPerformanceCounter()

This code抽象所有上述的進一個簡單的接口,它返回毫秒作爲的int64_t的數量。請注意,返回的毫秒值僅用於相對使用(例如超時),並且不相對於任何特定時間。

+0

'CLOCK_MONOTONIC'與java函數不完全等價,因爲java函數也受到wallclock調整的影響。當然,這是間隔定時器的正確選擇,但是如果OP需要一個掛鐘時間,它不會起作用。 – bdonlan 2012-05-05 06:25:45

相關問題