我正在编写一个日志类,它应该提供一个微秒精度级别的当前日期和时间。我不想使用snprintf直接格式化所有日志消息(这样就可以有效地过滤它们),而是具有如下结构:
struct log_record {
timestamp_t time;
uint32_t msg_len;
...
}这应该能够与其他可能有另一个cpu、os (linux和windows)等的机器共享(例如,使用tcp )。是否存在时间戳格式/库(可能在某些数据库系统中)?能满足我的要求吗?
发布于 2015-04-29 10:36:34
您可以在某些平台上实现微秒级的粒度,但是您不会获得微秒级的精度,因为系统时钟肯定不是那么精确。在典型的桌面机器上,预计会有几秒甚至几分钟的偏移,在使用NTP进行仔细同步的机器上,则会减少到毫秒。
在我所知道的所有Unix系统(包括Linux)上,好的旧gettimeofday产生的粒度介于10 OS到1 s之间,这取决于操作系统和硬件:
rc = gettimeofday(&tv, NULL);在大多数Linux平台上,clock_gettime提供了更好的粒度,减少到数百纳秒:
rc = clock_gettime(CLOCK_REALTIME, &ts);在Windows上,您需要使用GetSystemTimeAsFileTime函数,然后可以使用FileTimeToSystemTime函数将其转换为有用的结果。但是,这只会给您带来几十毫秒的粒度,除非您与性能计数器玩肮脏的把戏。
https://stackoverflow.com/questions/29939428
复制相似问题