在你閱讀這個問題之前,只要知道這是「對於顧客」,因此我在這件事上沒有選擇。c90,POSIX和clock_gettime
因此,我們的客戶正在爲他們的項目使用c90標準。直到這一點,我們一直在使用c99,並樂於這樣做。我們完成此任務的功能是clock_gettime
。我們需要一種方法來獲得準確的時間毫秒以用於計時。
我看了一下C90實現time.h中,發現time(time_t*)
只有在秒級精確。 clock
應該讓我知道自程序開始運行以來已經過了多少點擊,但這種情況反而不穩定。 A printf
我有10000次重複,而循環回來時的值爲30到120之間的clock()
。這太不穩定了。
所以,問題是,有人知道一個很好的c90兼容方式來獲得毫秒準確的系統時間嗎?我們只對兩個讀數的三角洲感興趣。
感謝, soulsabr
編輯:正如zwol指出,我忘了說我知道clock_gettime
是POSIX。我認爲只要使用-std=c90
的cygwin上的gcc不會抱怨我們,我們對結果不會太挑剔。 :)在我的防守中,我整天都在使用Google,並且我的大腦受傷了。
編輯2:進一步研究後,我懷疑我可能會問錯了問題,由於我不理解POSIX到底是什麼,它被定義的時候。所以,通過.h
尋找time.h
我注意到_POSIX_TIMERS
沒有定義,當使用-std=90
這就是爲什麼我不能使用clock_gettime
。定義_POSIX_TIMERS
使一切正常。所以,我想我應該問的問題是「打開缺少的POSIX功能」的正確方法是什麼?或者您認爲簡單地定義_POSIX_TIMERS
是一個合適的解決方案?
此外,如果有人認爲我應該核彈這個問題,並要求重新讓我知道,我會的。
'clock_gettime'也不在C99中,只在POSIX中。 (它是*,iirc,在C11中)。在此基礎上,您可能會回到客戶身邊,爭論使用POSIX功能,而C90無法實現您的目標。但是,如果你需要使用C90而沒有其他的東西,那麼你就會被洗淨。 C90根本不提供你需要的東西。 – zwol
我想,你有一個理由不能使用'gettimeofday()'? – SergeyA
@zwol如果可以在gcc中使用POSIX並將-std = c90標誌設置爲我全部爲它。據我所知,它必須在cygwin下用該標誌準確編譯和運行。 – soulsabr