[C/C++11]_[初级]_[实用时间库chrono]

标签: C++11chrono计算时间日期执行时间
2695人阅读 评论(0) 收藏 举报
分类:

场景

  1. C++11开始提供了一个 实用时间库,相比C的time.h强多了,最明显的是可以精确到纳秒.
  2. vs2010还不支持这个库,所以比较可惜,对于新开发的项目,建议用2015可以使用最新特性.
  3. 一般用这个库来转换时间或计算函数执行时间或者CPU指令周期.

例子


#include <iostream>  
#include <algorithm>
#include <sstream>
#include <stdlib.h>  
#include <string.h>  
#include <string>
#include <assert.h>
#include <ctype.h>  
#include <vector> 
#include <Windows.h>
#include <chrono>
#include <iomanip>
#include <stdint.h>

using namespace std;  

class A
{
public:
    int i_;
};

int64_t Factorial(int gene)
{
    return (gene == 1)?1:gene*Factorial(gene-1);
}


void TestChrono()
{
    // 计算函数执行时间.
    auto start = std::chrono::steady_clock::now();
    std::vector<A*> v;
    for (int i = 1; i <= 1000000; ++i)
    {
        v.push_back(new A());
    }

    for (auto a : v)
    {
        delete a;
    }

    auto end = std::chrono::steady_clock::now();
    std::chrono::duration<double> diff = end-start;
    std::cout << "=>Time Elapse " << diff.count() << " s" << std::endl;

    // 获取过去24小时的时间
    std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
    std::time_t now_c = std::chrono::system_clock::to_time_t(now - std::chrono::hours(24));
    char buf[32];
    strftime(buf,32,"%Y-%m-%d %H:%M:%S",std::localtime(&now_c));
    std::cout << buf << std::endl;

    // time_t t;
    // t = time(NULL);
    // std::stringstream ss;
    // ss << put_time(localtime(&t),"%Y-%m-%d %H:%M:%S");
    // std::string str = ss.str();
    // std::cout << "str: " << str << std::endl;
}

int main(int argc, char const *argv[])  
{  
    TestChrono();
    return 0;  
}  

输出

=>Time Elapse 0.35702 s
2016-05-29 14:26:52

参考

chrono
time_point
put_time

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:878415次
    • 积分:11053
    • 等级:
    • 排名:第1626名
    • 原创:275篇
    • 转载:18篇
    • 译文:2篇
    • 评论:144条
    任务
    1. 阅读 《加密与解密》并总结 (2017年).
    QQ: 632994155
    搜索
    博客专栏
    最新评论