Linux 下获取纳秒级精度时间&使用usleep函数作为定时器&实现在特定时间点执行程序

本文介绍了在Linux系统下如何利用`clock_gettime`函数获取高精度时间,并通过`usleep`实现毫秒级定时器,以确保多个设备在系统时间的每100毫秒开始处同步执行程序。通过GPS设备同步时钟,然后在特定时间点执行,达到毫秒级时间误差的目标。
摘要由CSDN通过智能技术生成

Linux 高精度时间获取+usleep定时器使用=在特定时间点执行程序(ms级精度)

因为项目需要,我需要在多个终端(基于openwrt的AP)上同时执行某一程序,多个终端开始执行程序的时间误差需要在毫秒(ms)级及以下,在查阅了相关资料之后,我设计了相应方案,下面介绍怎样实现上述功能。

内核时间概念
  内核时间包括了几个时间:
   系统时间:自系统开始启动所经过的时间;
   墙上时间:即真实世界中所使用的时间;
   实时时钟:即RTC时间,通过硬件维持的的时间。

Linux 高精度时间获取
  函数"clock_gettime"是基于Linux C语言的时间函数,
使用格式:
  #include<time.h>
  int clock_gettime(clockid_t clk_id,struct timespec *tp);
参数clk_id指定了获取的时间类型,有如下几种:
  CLOCK_REALTIME:墙上时间,格式为:从UTC1970-1-1 0:0:0开始到当前时间经过的秒数;
  CLOCK_MONOTONIC:系统时间;
  CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间
  CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间
struct timespec 为用于存储获取的时间结果的结构体,其格式如下:
     struct timespec
      {
        time_t tv_sec; //秒
        long tv_nsec; //纳秒
       };

Usleep函数的使用
  usleep函数能把进程挂起一段时间, 单位是微秒(千分之一毫秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值