跨平台微秒精确时间戳
Cross-platform microsecond precise timestamp
我正在编写一个日志记录类,它应该以微秒精度级别提供当前日期和时间。我不想直接使用 snprintf 格式化所有日志消息(因此可以有效地过滤它们),而是有一个这样的结构:
struct log_record {
timestamp_t time;
uint32_t msg_len;
...
}
这应该能够与其他机器共享(例如使用tcp),这些机器可能有另一个CPU,操作系统(Linux和Windows)等。是否有现有的时间戳格式/库(也许在某些数据库系统中?)可以满足我的要求?
在某些平台上可以实现微秒粒度,但不会获得微秒精度,因为系统时钟肯定不是那么准确。 在典型的台式计算机上,预计偏移量为数秒甚至数分钟,在使用 NTP 精心同步的计算机上,偏移量可降至毫秒。
在我已知的所有Unix系统(包括Linux)上,好的旧gettimeofday
会产生10ms到1μs之间的粒度,具体取决于操作系统和硬件:
rc = gettimeofday(&tv, NULL);
在大多数 Linux 平台上,clock_gettime
提供了更好的粒度,低至数百纳秒:
rc = clock_gettime(CLOCK_REALTIME, &ts);
在 Windows 上,您需要使用 GetSystemTimeAsFileTime
函数,然后您可以使用 FileTimeToSystemTime
函数将其结果转换为有用的内容。 但是,这只会为您提供几十毫秒的粒度,除非您使用性能计数器玩肮脏的把戏。
相关文章:
- 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 时间戳转换为人类可读的日期
- Microsoft NTLM (v2) 中的时间戳使用
- C++中上周一的时间戳
- C++-需要读取存储在文件(.txt)中的时间戳并正确检索
- 使用 C++将时间戳转换为格式化的日期时间
- 跨平台微秒精确时间戳