【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
Linux时间结构体与函数
clockid_t, struct timespec
clock_getres(), clock_gettime(), clock_settime() - clock and time functions
/**
* 头文件
*/
#include <time.h>
/**
* 函数参数1. clockid_t clk_id
* int类型变量, 表示是要操作的特定时钟的标识符
* 值一般为CLOCK_MONOTONIC, 表示系统开机到现在的时钟
*
* CLOCK_REALTIME 系统从1970.1.1零时到现在的时间
* CLOCK_MONOTONIC 系统从开机到现在的时间(不能被设置)
* CLOCK_PROCESS_CPUTIME_ID 进程运行时间
* CLOCK_THREAD_CPUTIME_ID 线程运行时间
* CLOCK_REALTIME_HR CLOCK_REALTIME的高精度版本
* CLOCK_MONOTONIC_HR CLOCK_MONOTONIC的高精度版本
*/
clockid_t clk_id
/**
* 函数参数2. struct timespec
* 时间结构体
*/
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
// 获取特定时钟的时间精度
int clock_getres(clockid_t clk_id, struct timespec *res);
// 获取特定时钟的时间精度
int clock_gettime(clockid_t clk_id, struct timespec *tp);
// 设置特定时钟的时间精度
int clock_settime(clockid_t clk_id, const struct timespec *tp);
/**
* 注意事项
*/
Link with -lrt (only for glibc versions before 2.17).
举个例子(计时, 精确到纳秒级):
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<unistd.h>
static int64_t get_clock(void)
{
struct timespec ts;
clock_gettime(CLOCK_MONOTONIC,&ts);
return ts.tv_sec*1000000000LL+ts.tv_nsec;
}
int main()
{
int64_t timer1,timer2;
struct timeval starttime,endtime;
double timeuse;
timer1=get_clock();
system("sleep 2");
timer2=get_clock();
printf("timer1=%ld\ntimer2=%ld\n",timer1,timer2);
return 0;
}
struct timeval, struct timezone
gettimeofday, settimeofday - get / set time
/**
* 头文件
*/
#include <sys/time.h>
/**
* 函数参数1. struct timeval
*/
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};
/**
* 函数参数2. struct timezone
*/
struct timezone {
int tz_minuteswest; /* minutes west of Greenwich, 以格林威治时间为基准向西算的分钟数, 相当于和格林威治时间差了多少分钟(个人觉得不会用到) */
int tz_dsttime; /* type of DST correction, 夏令时修正类型 */
};
// 自1970年1月1日零时到现在的时间
int gettimeofday(struct timeval *tv, struct timezone *tz);
int settimeofday(const struct timeval *tv, const struct timezone *tz);
举个例子(计时, 精确到微秒级):
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<unistd.h>
#include<sys/time.h>
int main()
{
struct timeval starttime,endtime;
double timeuse;
gettimeofday(&starttime,NULL);
sleep(2);
gettimeofday(&endtime,NULL);
timeuse=1000000*(endtime.tv_sec-starttime.tv_sec)+endtime.tv_usec-starttime.tv_usec;
timeuse/=1000000;
printf("timeuse=%f \n",timeuse);
return 0;
}