C ++中的便携式高精度双时间戳?

时间:2012-02-26 22:51:41

标签: c++ timestamp double portability

以下是我需要做的事情:

double now=getdoubletimestampsomehow();

其中getdoubletimestampsomehow()应该是一个简单易用的函数,返回一个double值,表示从给定日期开始经过的秒数。我需要它非常精确,但我并不需要它比几毫秒更精确。可移植性非常重要,如果无法将其直接移植到任何地方,请告诉我unix和windows方法吗?

4 个答案:

答案 0 :(得分:4)

您是否看过Boost,尤其是Date_Time library?这是seconds since epoch示例。

你会很难找到更便携,更高分辨率的东西。

答案 1 :(得分:2)

  

C ++中的便携式高精度双时间戳?

没有使用第三方库,没有可移植的方法来获得高精度时间戳(毫秒)。使用time / localtime / gmtime,您将获得最高精度1秒。

如果你对第三方库没问题,可以使用Boost或Qt 4。

  

unix和windows方式都可以吗?

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成员。这可能包含您想要的内容。

Reference

  

在发布C ++ 11标准之前,没有一种标准方法可以准确地测量一段代码的执行时间。程序员被迫使用Boost等外部库或每个操作系统提供的例程。

     

C ++ 11 chrono头文件提供了三个标准时钟,可用于计算一个代码:

     
      
  • system_clock - 这是系统使用的实时时钟;
  •   
  • high_resolution_clock - 这是当前系统上可能有最短滴答时间的时钟;
  •   
  • steady_clock - 这是一个保证永不调整的单调时钟。
  •   
     

如果要测量某段代码执行所需的时间,通常应该使用steady_clock,这是一个永远不会被系统调整的单调时钟。由计时标题提供的另外两个时钟可以偶尔调整,因此两个连续时刻之间的差值t0 <1。 t1,并不总是正面的。

答案 3 :(得分:-1)

双打不准确 - 因此你想到double now=getdoubletimestampsomehow();在第一道障碍时倒下了。

其他人提到了其他可能性。我会探索那些。