我正在编写一个日志类,它应该以微秒精度级别提供当前日期和时间。我不想直接使用snprintf格式化所有日志消息(因此可以有效地过滤它们),而是有一个像这样的结构:
struct log_record {
timestamp_t time;
uint32_t msg_len;
...
}
这应该可以与其他机器共享(例如使用tcp),这些机器可能有另外的cpu,os(linux和windows)等。是否存在时间戳格式/库(可能在某些数据库系统中? )这会满足我的要求吗?
答案 0 :(得分:1)
您可以在某些平台上实现微秒粒度,但是您不会获得微秒精度,因为系统时钟肯定不那么准确。在典型的台式机上预计会有几秒甚至几分钟的偏差,在使用NTP仔细同步的机器上可以减少毫秒。
在我所知的所有Unix系统(包括Linux)上,良好的旧gettimeofday
产生的粒度介于10ms和1μs之间,具体取决于操作系统和硬件:
rc = gettimeofday(&tv, NULL);
在大多数Linux平台上,clock_gettime
提供了更好的粒度,低至数百纳秒:
rc = clock_gettime(CLOCK_REALTIME, &ts);
在Windows上,您需要使用GetSystemTimeAsFileTime
函数,然后您可以使用FileTimeToSystemTime
函数将结果转换为有用的函数。但是,除非您使用性能计数器玩肮脏的技巧,否则这只会让您获得几十毫秒的粒度。