[英]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.