以下是我需要做的事情:
double now=getdoubletimestampsomehow();
其中getdoubletimestampsomehow()应该是一个简单易用的函数,返回一个double值,表示从给定日期开始经过的秒数。我需要它非常精确,但我并不需要它比几毫秒更精确。可移植性非常重要,如果无法将其直接移植到任何地方,请告诉我unix和windows方法吗?
答案 0 :(得分:4)
您是否看过Boost,尤其是Date_Time library?这是seconds since epoch示例。
你会很难找到更便携,更高分辨率的东西。
答案 1 :(得分:2)
C ++中的便携式高精度双时间戳?
没有使用第三方库,没有可移植的方法来获得高精度时间戳(毫秒)。使用time
/ localtime
/ gmtime
,您将获得最高精度1秒。
如果你对第三方库没问题,可以使用Boost或Qt 4。
Windows上为unix和windows方式都可以吗?
GetSystemTime
,Linux上为gettimeofday
。
请注意,如果您计划使用时间戳来确定某些事件的顺序,那么这可能是一个坏主意。系统时钟可能具有非常有限的精度(在Windows平台上为10毫秒),在这种情况下,执行的几个操作因此可以产生相同的时间戳。因此,要确定您需要的事件顺序"logical timestamps"(“矢量时钟”就是其中一个例子)。
在Windows平台上,有一些高度精确的函数可用于确定自某些点(QueryPerformanceCounter
)以来经过了多长时间,但它们没有连接到时间戳。
答案 2 :(得分:2)
C ++ 11引入了包含相当多便携式时钟的<chrono>
标头。其中最高分辨率的时钟是std::chrono::high_resolution_clock
。
它将当前时间作为std::chrono::time_point
对象提供,该对象具有time_since_epoch
成员。这可能包含您想要的内容。
在发布C ++ 11标准之前,没有一种标准方法可以准确地测量一段代码的执行时间。程序员被迫使用Boost等外部库或每个操作系统提供的例程。
C ++ 11 chrono头文件提供了三个标准时钟,可用于计算一个代码:
- system_clock - 这是系统使用的实时时钟;
- high_resolution_clock - 这是当前系统上可能有最短滴答时间的时钟;
- steady_clock - 这是一个保证永不调整的单调时钟。
如果要测量某段代码执行所需的时间,通常应该使用steady_clock,这是一个永远不会被系统调整的单调时钟。由计时标题提供的另外两个时钟可以偶尔调整,因此两个连续时刻之间的差值t0 <1。 t1,并不总是正面的。
答案 3 :(得分:-1)
双打不准确 - 因此你想到double now=getdoubletimestampsomehow();
在第一道障碍时倒下了。
其他人提到了其他可能性。我会探索那些。