我將在C/C++中開發一個小型專用服務器,這將需要永久運行。我一直在研究一些時間函數,因爲計算需要毫秒計時。我有2個問題,我面對:跨平臺毫秒計時器持續49天以上?
使用32位整數存儲的毫秒數自投產開始將在環繞約49天痕重置爲零。我曾考慮過使用64位整數,使用gettimeofday來檢索微秒,但這將我帶到第二部分。
似乎 有不被任何標準的系統調用用於獲取經過毫秒的平臺獨立的
我應該怎麼做,以解決這兩個問題?
我將在C/C++中開發一個小型專用服務器,這將需要永久運行。我一直在研究一些時間函數,因爲計算需要毫秒計時。我有2個問題,我面對:跨平臺毫秒計時器持續49天以上?
使用32位整數存儲的毫秒數自投產開始將在環繞約49天痕重置爲零。我曾考慮過使用64位整數,使用gettimeofday來檢索微秒,但這將我帶到第二部分。
似乎 有不被任何標準的系統調用用於獲取經過毫秒的平臺獨立的
我應該怎麼做,以解決這兩個問題?
使用一個64位的整數,假設,讓你有足夠的時間
你是正確的;沒有標準。一種可能性是使用Boost DateTime庫,或者找到另一個或者自己推出。
祝你好運!
明顯。使用具有平臺特定代碼的64位整數來獲取毫秒數。在包括OSX的Unix上,您需要gettimeofday
。在Windows上,獲得可靠的毫秒級粒度時間源的好運氣;由於該地區存在一些邪惡陷阱,因此code in the Tcl library to do this確實很複雜。
答案1:如果「毫秒計時」你是測量是在20天左右,就可以減去時間無符號數,檢查結果作爲符號值。這應該給包裝定時器的正確結果(從0xffffffff包裝到0x00000000)。如果你的時間超過20天,你需要更多的位。
正如前面已經說過,你要面對的第一個問題是要獲得可靠的毫秒精確的時間。
我承認我有點被這個問題分階段雖然。
我可以理解爲精確定時(毫秒級,甚至微秒),但在毫秒級定時50天似乎......奇怪的需要。
你或許應該先回顧一下你的需求,但它很少需要超過6個或7顯著數字......我怕你正在試圖獲得一個尺寸適合所有這些持續時間對象。
也許你應該改爲分類你的持續時間:
因爲......在2個月的規模上,1/10秒的感覺是什麼?
請原諒我,如果這是說明一個非常明顯的,但1)使用更多的位2)編寫一個系統依賴模塊,使任何時間的原始你最好的。 – msw 2010-04-06 13:55:10
「需要永久運行」 - 即使重新啓動也不允許?怎麼樣在服務器上漏水或斷電? LOST的艙口會炸燬,世界結束了嗎? – 2010-04-06 14:44:49
@Coronatus:更多的上下文:「一個C/C++服務器,將需要永遠的正常運行時間」。假如硬件沒有重新啓動/故障/隕石影響,硬件會變得任意長,那麼這個軟件還需要開發嗎?否則,你基本上說「這個軟件必須每X天重新啓動一次」,這顯然是一個不好的計劃。 – Cascabel 2010-04-06 15:11:41