1、简要案例
获取时间案例
double GetThreadCpuTimeSeconds() {
#ifndef WIN32
struct timespec thread_cpu_time;
CHECK(clock_gettime(CLOCK_THREAD_CPUTIME_ID, &thread_cpu_time) == 0)
<< std::strerror(errno);
return thread_cpu_time.tv_sec + 1e-9 * thread_cpu_time.tv_nsec;
#else
return 0.;
#endif
}
2、说明
Linux提供clock_gettime接口,获取系统时间。clock_gettime( ) 提供了纳秒的精确度,给程序计时可是不错哦;
函数的原型如下:
#include <time.h> //头文件
int clock_gettime(clockid_t clk_id, struct timespect *tp);
clockid_t clk_id用于指定计时时钟的类型,对于我们Programmr以下四种比较常用:
- CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户该成其他,则对应的时间相应改变
- CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响
- CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
- CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
其中:timespec
/* POSIX.1b structure for a time value. This is like a `struct timeval' but
has nanoseconds instead of microseconds. */
struct timespec
{
__time_t tv_sec; /* Seconds. */
__syscall_slong_t tv_nsec; /* Nanoseconds. */
};