c++ 用毫秒计算程序运行的时间

参考:

  1. time(null)的用法link
  2. c/c++ 获取当前时间 精确到毫秒或者秒link
  3. C++获取当前时间link
  4. https://www.csdn.net/tags/MtTaEgzsMDM0Mzc2LWJsb2cO0O0O.html
  5. 深入理解std::chrono的时钟Clock
  6. std::chrono::high_resolution_clock简单测试
  7. C++11获取系统当前时间(精确到微秒)

代码:

#include <iostream>
//time(NULL)
#include <time.h>
//gettimeofday(&time, NULL)
#include <sys/time.h>
//std::chrono::steady_clock::now()
#include <chrono>
//usleep();
#include <unistd.h>
//double_t ms
#include <cmath>
//cv::getTickCount()
#include <opencv2/opencv.hpp>


int main(int argc, char *argv[])
{
    //精确到秒
    std::cout << "****************************** t0 ******************************"<< std::endl;
    int curtime01 = time(NULL);
    usleep(1000000); // 微秒
    sleep(1); //秒
    int  curtime02 = time(NULL);
    std::cout << curtime02<< " - " <<curtime01 << " = "<< curtime02-curtime01<< " s" << std::endl;

    //精确到毫秒
    std::cout << "****************************** t1 ******************************"<< std::endl;
    struct timeval time1;
    gettimeofday(&time1, NULL);
    long now_time11 = time1.tv_sec*1000 + time1.tv_usec/1000;
    printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time11);

    usleep(10000);
    gettimeofday(&time1, NULL);
    long now_time12 = time1.tv_sec*1000 + time1.tv_usec/1000;
    printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time12);
    std::cout << now_time12 << " - " << now_time11 << " = "<< now_time12-now_time11<< " ms" << std::endl;


    //精确到毫秒
    std::cout << "****************************** t2 ******************************"<< std::endl;
    auto t21 = std::chrono::steady_clock::now();
    //std::chrono::steady_clock::time_point t11 = std::chrono::steady_clock::now();
    usleep(10000);
    std::chrono::steady_clock::time_point t22 = std::chrono::steady_clock::now();
    //auto t21 = std::chrono::steady_clock::now();
    using double_ms = std::chrono::duration<double,std::milli>;//
    double_t ms = std::chrono::duration_cast<double_ms>(t22-t21).count();
    std::cout <<  "Time elapsed: "<< ms << " ms" << std::endl;

    //精确到毫秒
    std::cout << "****************************** t3 ******************************"<< std::endl;
    long t31 = cv::getTickCount();
    usleep(10000);
    long t32 = cv::getTickCount();
    std::cout << "Time elapsed: " << (t32 - t31) / cv::getTickFrequency() * 1000 << " "<< "ms" << std::endl;

    //精确到毫秒
    std::cout << "****************************** t4 ******************************"<< std::endl;
    std::chrono::system_clock::time_point t41 = std::chrono::system_clock::now();
    std::time_t tt41 = std::chrono::system_clock::to_time_t(t41);      //转换为旧式接口,单位:秒
    std::cout << tt41 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;
    std::chrono::system_clock::duration duration_since_epoch_t41 = t41.time_since_epoch();
    std::time_t  milliseconds_since_epoch_t41 = std::chrono::duration_cast< std::chrono::milliseconds>(duration_since_epoch_t41).count();
    std::cout << milliseconds_since_epoch_t41 << " milliseconds from 1970-01-01 00:00:00 UTC" << std::endl;
    std::time_t  microseconds_since_epoch_t41 = std::chrono::duration_cast< std::chrono::microseconds>(duration_since_epoch_t41).count();
    std::cout << microseconds_since_epoch_t41 << " microseconds from 1970-01-01 00:00:00 UTC" << std::endl;


    gettimeofday(&time1, NULL);
    long now_time41 = time1.tv_sec*1000 + time1.tv_usec/1000;
    printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time41);

    usleep(1000000);
    std::cout << "---------  " << 1000 << " ms ----------" << std::endl;
    gettimeofday(&time1, NULL);
    long now_time42 = time1.tv_sec*1000 + time1.tv_usec/1000;
    printf("s: %ld, ms: %ld\n", time1.tv_sec, now_time42);

    std::chrono::system_clock::time_point t42 = std::chrono::system_clock::now();//stl库获取当前时间
    //std::time_t newTime = std::chrono::system_clock::to_time_t(timePoint);//转换为旧式接口,单位:秒
    long  tt42 = std::chrono::system_clock::to_time_t(t42);
    std::cout << tt42 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;
    std::chrono::system_clock::duration duration_since_epoch_t42 = t42.time_since_epoch();
    //long long microseconds_since_epoch = std::chrono::duration_cast< std::chrono::microseconds>(duration_since_epoch).count(); // 将时长转换为微秒数
    std::time_t  milliseconds_since_epoch_t42 = std::chrono::duration_cast< std::chrono::milliseconds>(duration_since_epoch_t42).count();
    std::cout << milliseconds_since_epoch_t42 << " milliseconds from 1970-01-01 00:00:00 UTC" << std::endl;
    std::time_t  microseconds_since_epoch_t42 = std::chrono::duration_cast< std::chrono::microseconds>(duration_since_epoch_t42).count(); // 将时长转换为微秒数
    std::cout << microseconds_since_epoch_t42 << " microseconds from 1970-01-01 00:00:00 UTC" << std::endl;


    //精确到纳秒、微秒
    std::cout << "****************************** t5 ******************************"<< std::endl;

    std::chrono::high_resolution_clock::time_point t51 = std::chrono::high_resolution_clock::now();
    std::time_t tt51 = std::chrono::high_resolution_clock::to_time_t(t51);
    std::cout << tt51 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;

    usleep(1000000);
    std::cout << "---------  " << 1000 << " ms ---------- " << 1 << " s ---------" << std::endl;
    std::chrono::high_resolution_clock::time_point t52 = std::chrono::high_resolution_clock::now();
    std::time_t tt52 = std::chrono::high_resolution_clock::to_time_t(t52);
    std::cout << tt52 << " seconds from 1970-01-01 00:00:00 UTC" << std::endl;

    std::chrono::nanoseconds t5 = t52 -t51;

    std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::seconds>(t5).count()<< " seconds" << std::endl;
    std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::milliseconds>(t5).count()<< " milliseconds" << std::endl;
    std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::microseconds>(t5).count()<< " microseconds" << std::endl;
    std::cout << "Time elapsed: "<< std::chrono::duration_cast<std::chrono::nanoseconds>(t5).count()<< " nanoseconds" << std::endl;

    return 0;
}

打印结果:

****************************** t0 ******************************
1651049763 - 1651049761 = 2 s
****************************** t1 ******************************
s: 1651049763, ms: 1651049763105
s: 1651049763, ms: 1651049763115
1651049763115 - 1651049763105 = 10 ms
****************************** t2 ******************************
Time elapsed: 10.0911 ms
****************************** t3 ******************************
Time elapsed: 10.1087 ms
****************************** t4 ******************************
1651049763 seconds from 1970-01-01 00:00:00 UTC
1651049763136 milliseconds from 1970-01-01 00:00:00 UTC
1651049763136177 microseconds from 1970-01-01 00:00:00 UTC
s: 1651049763, ms: 1651049763136
---------  1000 ms ----------
s: 1651049764, ms: 1651049764136
1651049764 seconds from 1970-01-01 00:00:00 UTC
1651049764136 milliseconds from 1970-01-01 00:00:00 UTC
1651049764136337 microseconds from 1970-01-01 00:00:00 UTC
****************************** t5 ******************************
1651049764 seconds from 1970-01-01 00:00:00 UTC
---------  1000 ms ---------- 1 s ---------
1651049765 seconds from 1970-01-01 00:00:00 UTC
Time elapsed: 1 seconds
Time elapsed: 1000 milliseconds
Time elapsed: 1000123 microseconds
Time elapsed: 1000123292 nanoseconds

Process finished with exit code 0
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值