gpt4 book ai didi

c++ - 跨平台微秒级精准时间戳

转载 作者:行者123 更新时间:2023-11-28 06:17:37 26 4
gpt4 key购买 nike

我正在编写一个日志记录类,它应该以微秒级的精度提供当前日期和时间。我不想直接使用 snprintf 格式化所有日志消息(因此它们可以被有效地过滤)而是有一个像这样的结构:

struct log_record {
timestamp_t time;
uint32_t msg_len;
...
}

这应该能够与可能有另一个 cpu、操作系统(linux 和 windows)等的其他机器(例如使用 tcp)共享。是否有现有的时间戳格式/库(可能在某些数据库系统中? ) 可以满足我的要求吗?

最佳答案

您可以在某些平台上实现微秒粒度,但您不会获得微秒精度,因为系统时钟肯定不是那么准确。在典型的台式机上预计偏移数秒甚至数分钟,在使用 NTP 仔细同步的机器上减少到毫秒。

在我所知道的所有 Unix 系统(包括 Linux)上,良好的旧 gettimeofday 产生一个介于 10ms 和 1µs 之间的粒度,具体取决于操作系统和硬件:

rc = gettimeofday(&tv, NULL);

在大多数 Linux 平台上,clock_gettime 提供了更好的粒度,低至数百纳秒:

rc = clock_gettime(CLOCK_REALTIME, &ts);

在 Windows 上,您需要使用 GetSystemTimeAsFileTime函数,然后您可以使用 FileTimeToSystemTime 将其结果转换为有用的东西功能。但是,这只会让您获得几十毫秒的粒度,除非您使用性能计数器玩肮脏的把戏。

关于c++ - 跨平台微秒级精准时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29939428/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com