struct timespec 和 struct timeval
内容转自:https://blog.csdn.net/weixin_44880138/article/details/102605681
struct timespec 和 struct timeval
time()提供了秒级的精确度 .
头文件 <time.h> 函数原型 time_t time(time_t * timer) 函数返回从TC1970-1-1 0:0:0开始到现在的秒数 用time()函数结合其他函数(如:localtime、gmtime、asctime、ctime)可以获得当前系统时间或是标准时间。
如果需要更高的时间精确度,就需要struct timespec 和 struct timeval来处理:
struct timespec 定义:
typedef long time_t; #ifndef _TIMESPEC #define _TIMESPEC struct timespec { time_t tv_sec; // seconds long tv_nsec; // and nanoseconds }; #endif
struct timespec有两个成员,一个是秒,一个是纳秒, 所以最高精确度是纳秒。
一般由函数int clock_gettime(clockid_t, struct timespec *)获取特定时钟的时间,常用如下4种时钟:
CLOCK_REALTIME 统当前时间,从1970年1.1日算起 CLOCK_MONOTONIC 系统的启动时间,不能被设置 CLOCK_PROCESS_CPUTIME_ID 本进程运行时间 CLOCK_THREAD_CPUTIME_ID 本线程运行时间 struct tm *localtime(const time_t *clock); //线程不安全 struct tm* localtime_r( const time_t* timer, struct tm* result ); //线程安全 size_t strftime (char* ptr, size_t maxsize, const char* format, const struct tm* timeptr );
struct timeval 定义:
struct timeval { time_t tv_sec; // seconds long tv_usec; // microseconds }; struct timezone{ int tz_minuteswest; //miniutes west of Greenwich int tz_dsttime; //type of DST correction };
struct timeval有两个成员,一个是秒,一个是微秒, 所以最高精确度是微秒。
一般由函数int gettimeofday(struct timeval *tv, struct timezone *tz)获取系统的时间
#include<stdio.h> #include<time.h> #include<sys/time.h> void nowtime_ns() { printf("----------------struct timespec-------------------\n"); printf("[time(NULL)] : %ld\n", time(NULL)); struct timespec ts; clock_gettime(CLOCK_REALTIME, &ts); printf("clock_gettime : tv_sec=%ld, tv_nsec=%ld\n",ts.tv_sec, ts.tv_nsec); struct tm t; char date_time[64]; strftime(date_time, sizeof(date_time), "%Y-%m-%d %H:%M:%S", localtime_r(&ts.tv_sec, &t)); printf("clock_gettime :date_time=%s, tv_nsec=%ld\n", date_time, ts.tv_nsec); } void nowtime_us() { printf("------------struct timeval------------------\n"); printf("[time(NULL)] : %ld\n", time(NULL)); struct timeval us; gettimeofday(&us,NULL); printf("gettimeofday: tv_sec=%ld, tv_usec=%ld\n", us.tv_sec, us.tv_usec); struct tm t; char date_time[64]; strftime(date_time, sizeof(date_time), "%Y-%m-%d %H:%M:%S", localtime_r(&us.tv_sec, &t)); printf("gettimeofday: date_time=%s, tv_usec=%ld\n", date_time, us.tv_usec); } int main(int argc, char* argv[]) { nowtime_ns(); printf("\n"); nowtime_us(); printf("\n"); return 0; } nowtime.cpp
执行结果:
1 ---------------------------struct timespec--------------------------------------- 2 [time(NULL)] : 1400233995 3 clock_gettime : tv_sec=1400233995, tv_nsec=828222000 4 clock_gettime : date_time=2014-05-16 17:53:15, tv_nsec=828222000 5 6 ---------------------------struct timeval---------------------------------------- 7 [time(NULL)] : 1400233995 8 gettimeofday: tv_sec=1400233995, tv_usec=828342 9 gettimeofday: date_time=2014-05-16 17:53:15, tv_usec=828342
浙公网安备 33010602011771号