这里就是我需要做的: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