繁体   English   中英

跨平台微秒精确时间戳

[英]Cross-platform microsecond precise timestamp

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

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

这应该能够与可能具有另一个cpu,os(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函数将其结果转换为有用的FileTimeToSystemTime 但是,除非您使用性能计数器玩弄肮脏的技巧,否则这只会使您获得几十毫秒的粒度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM