在C++中可移植精度良好的双时间戳
Portable good precision double timestamp in C++?
以下是我需要做的:
double now=getdoubletimestampsomehow();
其中,getdoubletimestampsomehow()应该是一个简单易用的函数,返回一个双值,表示从给定日期起经过的秒数。我需要它非常精确,但我真的不需要它比几毫秒更精确。可移植性非常重要,如果不能直接将其移植到任何地方,你能告诉我unix和windows的方法吗?
您看过Boost,尤其是它的Date_Time库吗?以下是自epoch以来的秒数示例。
你很难找到更便携、分辨率更高的东西。
C++中可移植的高精度双时间戳?
如果不使用第三方库,就无法获得高精度时间戳(毫秒)。使用time
/localtime
/gmtime
,您将获得1秒的最大精度。
如果你对第三方库很满意,可以使用Boost或Qt4。
既用unix又用windows?
Windows上的CCD_ 4和linux上的CCD_。
请注意,如果您计划使用时间戳来确定某些事件的顺序,那么这可能是个坏主意。系统时钟的精度可能非常有限(在windows平台上为10毫秒),在这种情况下,执行的几个操作可能会产生相同的时间戳。因此,要确定事件的顺序,您需要"逻辑时间戳"("矢量时钟"就是其中一个例子)。
在windows平台上,有一些高度精确的函数可以用来确定自过去的某个点(QueryPerformanceCounter
)以来已经过去了多少时间,但它们与时间戳无关。
C++11引入了包含相当多的可移植时钟的<chrono>
标头。其中分辨率最高的时钟是std::chrono::high_resolution_clock
。
它将当前时间提供为具有time_since_epoch
成员的std::chrono::time_point
对象。这可能包含您想要的内容。
参考:
在C++11标准发布之前,没有一种标准的方法可以准确地测量一段代码的执行时间。程序员被迫使用外部库,如Boost,或每个操作系统提供的例程。
C++11 chrono头文件提供了三个标准时钟,可用于对代码进行计时:
- system_clock-这是系统使用的实时时钟
- high_resolution_clock-这是当前系统上可能具有最短滴答周期的时钟
- steady_clock-这是一个单调的时钟,保证永远不会被调整
如果你想测量某段代码执行所花费的时间,你通常应该使用steady_clock,这是一个单调的时钟,系统永远不会调整它。由计时头提供的另外两个时钟可以偶尔调整,因此两个连续时刻之间的差t0<t1并不总是正的。
双打并不精确,因此你认为double now=getdoubletimestampsomehow();
在第一个跨栏时摔倒了。
其他人提到了其他可能性。我会探索这些。
- C++:floor unix时间戳到UTC月份
- 如何在c++中录制具有精确帧时间戳的视频
- 在两台机器之间进行时间戳的最佳c++chrono函数是什么
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 在多个时间戳处执行函数
- 以天C++为单位的两个时间戳之间的差异
- 获取 QInputEvent 在 Qt 4.8 中被放入 QEventLoop 队列时的时间戳
- 在 C++ 中为文件名添加时间戳
- 如何从远程 SFTP 服务器获取 HH-MM-SS 时间戳格式的文件列表
- 如何将消息时间戳写入日志文件?
- 将时间戳打印到流的最简单方法
- 读取悖论时间戳字段
- C++程序中多个位置的时间 (0) 时间戳
- 在 c++ 中获取 X 毫秒前的时间戳
- 将 unix 时间戳转换为人类可读的日期
- QT以微秒精度解析日期的时间戳
- 如何获得高分辨率时间戳作为双精度
- 在C++中可移植精度良好的双时间戳
- 用时间戳格式化亚秒精度时间
- 与PostgreSQL一起工作时,SOCI库中的高精度时间戳