這裏就是我需要做的:C++中的便攜式精確雙精度時間戳?
double now=getdoubletimestampsomehow();
凡getdoubletimestampsomehow()應該是直接的,易於使用的函數返回代表指定日期的經過的秒數的雙重價值。我需要它非常精確,但我並不需要它比幾毫秒更精確。可移植性非常重要,如果無法將它直接移植到任何地方,可以請告訴我一個unix和windows的方法嗎?
這裏就是我需要做的:C++中的便攜式精確雙精度時間戳?
double now=getdoubletimestampsomehow();
凡getdoubletimestampsomehow()應該是直接的,易於使用的函數返回代表指定日期的經過的秒數的雙重價值。我需要它非常精確,但我並不需要它比幾毫秒更精確。可移植性非常重要,如果無法將它直接移植到任何地方,可以請告訴我一個unix和windows的方法嗎?
在C++中的便攜式良好的精度雙時間戳嗎?
沒有使用第三方庫的高精度時間戳(毫秒)沒有可移植的方法。使用time
/localtime
/gmtime
,您將獲得最高精度爲1秒。
如果你的罰款與第三方庫,使用升壓或Qt的4
既是UNIX和Windows操作方式來做到這一點?
GetSystemTime
在Windows上和在Linux上的gettimeofday
。
請注意,如果您打算使用時間戳確定某些事件的順序,那麼這可能是一個壞主意。系統時鐘的精確度可能非常有限(在Windows平臺上爲10毫秒),在這種情況下,執行的多個操作會產生相同的時間戳。因此,要確定事件的順序,您需要"logical timestamps"(「矢量時鐘」就是一個例子)。
在Windows平臺上,有可用於確定自多少時間已經過去了,在過去(QueryPerformanceCounter
)一些點高度精確的功能,但它們沒有連接到時間戳。
不幸的是(或者幸運:))這個答案已經過時(通過C++ 11)。 – 2016-10-10 18:16:59
您是否看過Boost,特別是其Date_Time library?這裏是seconds since epoch的例子。
你將很難找到更便攜,更高分辨率的東西。
雙打併不精確 - 因此你在double now=getdoubletimestampsomehow();
的想法會在第一個障礙中倒下。
其他人提到了其他可能性。我會探討這些。
'雙'具有有限和變化的精度。這與「不精確」不一樣。 – 2012-02-26 23:04:47
C++ 11引入了<chrono>
頭文件,其中包含了很多便攜式時鐘。其中最高分辨率的時鐘是std::chrono::high_resolution_clock
。
它提供當前時間爲std::chrono::time_point
對象,其中包含time_since_epoch
成員。這可能包含你想要的。
在此之前的C++ 11標準的釋放,有在其中一個可以精確測量的一段代碼的執行時間沒有標準的方式。程序員被迫使用外部庫,如Boost或每個操作系統提供的例程。
的C++ 11計時頭文件提供了三個標準時鍾,可以被用於定時一個的代碼:
- SYSTEM_CLOCK - 這是由系統所使用的實時時鐘;
- high_resolution_clock - 這是當前系統上可能的最短滴答週期時鐘;
- steady_clock - 這是一個保證永不調整的單調時鐘。
如果要衡量執行某一段代碼所花費的時間,你應該一般採用steady_clock,這是從來沒有被系統調整單調時鐘。由計時標頭提供的另外兩個時鐘可以偶爾調整,所以兩個連續時刻t1之間的差異並不總是正的。
你在看什麼,爲什麼這些可能性不足?你看過[Boost](http://www.boost.org/doc/libs/1_49_0/doc/html/date_time.html)和[Qt](http://developer.qt)中的日期/時間設施。 nokia.com/doc/qt-4.8/qdatetime.html)?你真的需要時間戳是「雙」嗎? – 2012-02-26 22:55:23
[C++跨平臺高分辨率計時器]的可能重複(http://stackoverflow.com/questions/1487695/c-cross-platform-high-resolution-timer) – 2012-02-26 22:55:23