clock_gettime获取系统时间

clock_gettime()是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。

需要包含头文件
#include<time.h>
函数原型为
int clock_gettime(clockid_t clk_id,struct timespec *tp);

参数
clk_id 获取和设置指定时钟时间的 clk_id;
//CLOCK_REALTIME:系统相对时间,从UTC 1970-1-1 0:0:0开始计时,更改系统时间会更改获取的值;
//CLOCK_MONOTONIC:系统绝对时间/单调时间,为系统重启到现在的时间,更改系统时间对它没有影响;
//CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间;
//CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间;

struct timespec
{
    time_t tv_sec; /* 秒*/
    long tv_nsec; /* 纳秒*/
}

基于此封装的两个函数如下,分别是获取系统绝对时间和相对时间;

long long getSteadyMillis()
{
    //CLOCK_REALTIME:系统相对时间,从UTC 1970-1-1 0:0:0开始计时,更改系统时间会更改获取的值;
    //CLOCK_MONOTONIC:系统绝对时间/单调时间,为系统重启到现在的时间,更改系统时间对它没有影响;
    //CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间;
    //CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间;
    struct timespec ts {};
    (void)clock_gettime(CLOCK_MONOTONIC, &ts);
    long long milliseconds = (ts.tv_sec*1000) + (ts.tv_nsec/1000000);
    return milliseconds;
}

long long getSystemMillis()
{
    struct timespec ts {};
    (void)clock_gettime(CLOCK_REALTIME, &ts);
    long long milliseconds = (ts.tv_sec*1000) + (ts.tv_nsec/1000000);
    return milliseconds;
}

测试程序如下

/*****************************************
* Copyright (C) 2020 * Ltd. All rights reserved.
* File name   : time.cpp
* Created date: 2020-05-04 14:59:40
*******************************************/#include <iostream>
#include <string>
#include <map>
#include <vector>
#include <time.h>
#include <unistd.h>
#include <sys/time.h>using namespace std;long long getSteadyMillis()
{//CLOCK_REALTIME:系统相对时间,从UTC 1970-1-1 0:0:0开始计时,更改系统时间会更改获取的值;//CLOCK_MONOTONIC:系统绝对时间/单调时间,为系统重启到现在的时间,更改系统时间对它没有影响;//CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间;//CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间;struct timespec ts {};(void)clock_gettime(CLOCK_MONOTONIC, &ts);long long milliseconds = (ts.tv_sec*1000) + (ts.tv_nsec/1000000);return milliseconds;
}long long getSystemMillis()
{struct timespec ts {};(void)clock_gettime(CLOCK_REALTIME, &ts);long long milliseconds = (ts.tv_sec*1000) + (ts.tv_nsec/1000000);return milliseconds;
}int main() {int i = 0;long long nowSys;long long lastSys = getSystemMillis();long long sysinterval = nowSys - lastSys;long long nowclk;long long lastclk = getSteadyMillis();long long clkinterval = nowclk - lastclk;std::cout << "CLOCKS_PER_SEC: " << CLOCKS_PER_SEC << std::endl;for (i=0; i<= 100; i++) {nowSys = getSystemMillis();nowclk = getSteadyMillis();clkinterval = nowclk - lastclk;sysinterval = nowSys - lastSys;std::cout<<"nowSys:"<<nowSys<<",nowclk:"<<nowclk<<",sysinterval:"<<sysinterval<<",clkinterval:"<<clkinterval<<std::endl;lastclk = nowclk;lastSys = nowSys;sleep(1);}return 0;
}

结果

nowSys:1588688076572,nowclk:203208551,sysinterval:1000,clkinterval:1000
nowSys:1588688077573,nowclk:203209552,sysinterval:1001,clkinterval:1001
nowSys:1588688078574,nowclk:203210553,sysinterval:1001,clkinterval:1001
nowSys:1588688079575,nowclk:203211554,sysinterval:1001,clkinterval:1001
nowSys:1588688080575,nowclk:203212554,sysinterval:1000,clkinterval:1000
nowSys:1588688081575,nowclk:203213555,sysinterval:1000,clkinterval:1001
nowSys:1588688130302,nowclk:203214556,sysinterval:48727,clkinterval:1001 #sudo date -s "22:15:30"修改系统时间
nowSys:1588688131303,nowclk:203215557,sysinterval:1001,clkinterval:1001
nowSys:1588688132303,nowclk:203216557,sysinterval:1000,clkinterval:1000
nowSys:1588688133304,nowclk:203217557,sysinterval:1001,clkinterval:1000
nowSys:1588688134304,nowclk:203218558,sysinterval:1000,clkinterval:1001
nowSys:1588688135304,nowclk:203219558,sysinterval:1000,clkinterval:1000
nowSys:1588688136305,nowclk:203220559,sysinterval:1001,clkinterval:1001
nowSys:1588688130856,nowclk:203221559,sysinterval:-5449,clkinterval:1000 #sudo date -s "22:15:30"修改系统时间
nowSys:1588688131857,nowclk:203222560,sysinterval:1001,clkinterval:1001
nowSys:1588688132858,nowclk:203223562,sysinterval:1001,clkinterval:1002
nowSys:1588688133859,nowclk:203224562,sysinterval:1001,clkinterval:1000
nowSys:1588688134860,nowclk:203225563,sysinterval:1001,clkinterval:1001

clock_gettime获取系统时间相关推荐

  1. linux系统gettime获取的时间,clock_gettime获取系统时间

    clock_gettime获取系统时间 clock_gettime()是基于Linux C语言的时间函数,他可以用于计算精度和纳秒. 需要包含头文件 #include函数原型为 int clock_g ...

  2. VC获取系统时间、程序运行时间

    1.使用CTime类 CString str;  //获取系统时间  CTime tm;  tm=CTime::GetCurrentTime();  str=tm.Format("现在时间是 ...

  3. c 获取当前时间插入oracle数据库,Oracle如何获取系统当前时间等操作实例,c++获取系统时间...

    Oracle如何获取系统当前时间等操作实例,c++获取系统时间 获取系统当前时间 date类型的 select sysdate from dual; char类型的 select to_char(sy ...

  4. VC++ 获取系统时间的方法汇总

    1.使用CTime类(获取系统当前时间,精确到秒) ? 1 2 3 4 5 6 CString str; //获取系统时间 CTime tm; tm=CTime::GetCurrentTime();/ ...

  5. Linux驱动中获取系统时间

    最近在做VoIP方面的驱动,总共有16个FXS口和FXO口依次初始化,耗用的时间较多.准备将其改为多线程,首先需要确定哪个环节消耗的时间多,这就需要获取系统时间. #include <linux ...

  6. C++11新特性,利用std::chrono精简传统获取系统时间的方法

    一.传统的获取系统时间的方法 传统的C++获取时间的方法须要分平台来定义. 相信百度代码也不少. 我自己写了下,例如以下. const std::string getCurrentSystemTime ...

  7. java自动获取时间 月代码_【java代码获取系统时间和执行定时任务】

    获取系统时间 主要类简介 SimpleDateFormat 是一个以与语言环境有关的方式来格式化和解析日期的具体类.它允许进行格式化(日期 -> 文本).解析(文本 -> 日期)和规范化. ...

  8. c++ 如何获取系统时间

    DoubleSnake   转载http://blog.csdn.net/zjnig711/article/details/2419081 c++ 如何获取系统时间 2008-04-28 15:34 ...

  9. 获取系统时间出错oracle-,oracle 获取系统时间(转)

    Oracle中如何获取系统当前时间 select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual; ORACLE里获取一个时间的年.季.月.周.日 ...

最新文章

  1. springmvc是如何和前端页面联系起来的
  2. 【数据挖掘】数据挖掘算法 组件化思想 ( 模型或模式结构 | 数据挖掘任务 | 评分函数 | 搜索和优化算法 | 数据管理策略 )
  3. pythonexcel工具介绍_Python处理excel的强大工具
  4. 从卖冰箱到卖年夜饭,看海尔智家生态品牌新成果
  5. MATLAB 人脸定位
  6. linux c文件操作,Linux C 文件的输入/输出操作
  7. springboot+mybatis-plus实例demo
  8. 秋季海报设计元素|水彩手绘纹理植物素材,从人群中脱颖而出。
  9. 712. Minimum ASCII Delete Sum for Two Strings
  10. linux 查看端口占用命令 亲测可用
  11. IDEA拉取GitLab代码出现Git Pull failed remote: HTTP Basic: Access denied
  12. U盘提示磁盘写保护无法强制格式化------使用量产工具解决
  13. 北京军区技侦局_校庆70周年系列学术活动之六:
  14. GO函数内部程序执行顺序
  15. C++在屏幕中输出数字d0...while
  16. Python基础操作_字典的遍历
  17. 选购摄像头前必看,摄像头参数科普
  18. 鸿蒙系统能玩魔兽世界吗,魔兽世界:永久60级与TBC该怎么选,60级服务器真的会有玩家么?...
  19. js学习笔记(1)什么是JavaScript
  20. oa办公系统源码OA企业人事管理系统源码php协同自动化办公签到

热门文章

  1. Excel批量把数字格式变成文本格式且不用双击出现左上绿标
  2. 计算机管理mmc无法,mmc无法创建管理单元解决方法
  3. 【单片记笔记】基于STM32F103的NEC红外发送接收使用同一个定时器的一体设计
  4. 虚拟定位的实现android,王者荣耀战区哪里分最低 王者荣耀低分战区推荐
  5. git/码云+npm语法
  6. 【Python】random.randint()用法
  7. cannot bind non-const lvalue reference of type ‘***‘ to an rvalue of type ‘***‘解决方法
  8. EditText getText
  9. TCP 三次握手的原因是什么?
  10. 【图像超分辨率】Accurate Image Super-Resolution Using Very Deep Convolutional Networks