[C++] C/C++高精度时间及其延时

本文详细介绍C++中实现高精度时间测量的方法,包括微秒和纳秒级的时间结构体和函数,如timeval和timespec,以及C++11的chrono库。文章提供了测试代码示例,对比不同方法的精度,并介绍了如何使用这些工具进行高精度延时。

1. 写在前面

在分析算法的性能时,我们通过算法的时间复杂度可以从理论上分析出算法的大致高阶,但是当我们想具体比较一下算法真正的性能时,往往希望在机器上测试并记录其运行的真实时间,那么就要用到C/C++中一些高精度时间函数。

2. 高精度时间结构体和函数

  1. 微秒
#include <sys/time.h>
struct timeval {
   
   
    time_t      tv_sec;     /* seconds */
    suseconds_t tv_usec;    /* microseconds */
};

获取时间的函数:int gettimeofday(struct timeval *tv, struct timezone *tz);
demo:

  1. 纳秒
#include <time.h>
struct timespec {
   
   
    time_t   tv_sec;        /* seconds */
    long     tv_nsec;       /* nanoseconds */
};
  1. chrono
    C++11推出的纳秒级时间chrono.
auto start = std::chrono::system_clock::now();
auto end = std::chrono::system_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end - start);
// print timediff
std::cout << (double)(duration.count()) * std::chrono::microseconds::period::num / std::chrono::microseconds::period::den  << "s" << std::endl;

3. 高精度延时

若想简单的话,可以用精度不太高的系统函数sleep()usleep()实现秒和微秒级定时,如果想高精度定时,查阅了大量博客发现,基本上都是用章节2中高精度时间来即使,即:

void timingus(size_t us)
{
   
   
    auto start = std::chrono
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值