C++實(shí)現(xiàn)獲取時(shí)間戳和計(jì)算運(yùn)行時(shí)長(zhǎng)
一、便于使用,使用chrono封裝一個(gè)簡(jiǎn)單的類
#pragma once
#include <chrono>
using CTime_point = std::chrono::high_resolution_clock::time_point;
class CElapsedTime final
{
public:
static CTime_point now() {
return std::chrono::high_resolution_clock::now();
}
using s = std::chrono::seconds;
using ms = std::chrono::milliseconds;
using us = std::chrono::microseconds;
using ns = std::chrono::nanoseconds;
//獲取當(dāng)前時(shí)間戳 類型: s/ms/us/ns
template<typename T = CElapsedTime::ms> static long long since_epoch() {
const auto now = std::chrono::system_clock::now();//時(shí)間戳要用 system_clock
const auto sinceEpoch = std::chrono::duration_cast<T>(now.time_since_epoch());
return sinceEpoch.count();
}
//計(jì)算時(shí)間差 類型: s/ms/us/ns
template<typename T = CElapsedTime::ms>
static long long duration(const CTime_point &begin, const CTime_point &end)
{
const auto delta = std::chrono::duration_cast<T>(end - begin);
return delta.count();
}
const static long long _s = 1;
const static long long _ms = 1000;
const static long long _us = 1000000;
const static long long _ns = 1000000000;
//計(jì)算時(shí)間差 返回浮點(diǎn)類型
template<size_t T = CElapsedTime::_ms>
static double duration(const CTime_point &begin, const CTime_point &end)
{
const std::chrono::duration<double, std::ratio<1, T>> delta = end - begin;
return delta.count();
}
};二、直接調(diào)用
#include <stdlib.h>
#include <thread>
#include <iostream>
#include <iomanip>
#include "CElapsedTime.h"
int main(int argc, char *argv[])
{
#ifdef _WIN32
_tzset();
_putenv("_tz=GMT +8");
#else
setenv("TZ", "Asia/Shanghai", 1);
#endif
auto begin = CElapsedTime::now();
std::this_thread::sleep_for(std::chrono::milliseconds(1230));//運(yùn)行時(shí)長(zhǎng)
auto end = CElapsedTime::now();
long long sinceEpoch = CElapsedTime::since_epoch();
std::cout << "since epoch: " << sinceEpoch << std::endl;
std::cout << "run(s): " << CElapsedTime::duration<CElapsedTime::s>(begin, end) << std::endl;
std::cout << "run(ms): " << CElapsedTime::duration<CElapsedTime::ms>(begin, end) << std::endl;
std::cout << "run(us): " << CElapsedTime::duration<CElapsedTime::us>(begin, end) << std::endl;
std::cout << "run(ns): " << CElapsedTime::duration<CElapsedTime::ns>(begin, end) << std::endl;
std::cout << "run(s): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_s>(begin, end) << std::endl;
std::cout << "run(ms): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_ms>(begin, end) << std::endl;
std::cout << "run(us): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_us>(begin, end) << std::endl;
std::cout << "run(ns): " << std::fixed << std::setprecision(3) << CElapsedTime::duration<CElapsedTime::_ns>(begin, end) << std::endl;
return 0;
}運(yùn)行結(jié)果:

到此這篇關(guān)于C++實(shí)現(xiàn)獲取時(shí)間戳和計(jì)算運(yùn)行時(shí)長(zhǎng)的文章就介紹到這了,更多相關(guān)C++獲取時(shí)間戳內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++解密Chrome80版本數(shù)據(jù)庫(kù)的方法示例代碼
這篇文章主要介紹了C++解密Chrome80版本數(shù)據(jù)庫(kù)的方法示例代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
C語(yǔ)言實(shí)現(xiàn)魔方比賽管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)魔方比賽管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-05-05
C++面向?qū)ο笾鄳B(tài)的實(shí)現(xiàn)和應(yīng)用詳解
相信大家都知道面向?qū)ο蟮娜筇匦允欠庋b,繼承和多態(tài),下面這篇文章主要給大家介紹了關(guān)于C++面向?qū)ο笾鄳B(tài)的實(shí)現(xiàn)和應(yīng)用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-09-09
C語(yǔ)言 OpenCV實(shí)現(xiàn)柱面投影
在做全景拼接的時(shí)候,為了保持圖片中的空間約束與視覺(jué)的一致性,需要進(jìn)行柱面投影,否則離中心圖像距離越遠(yuǎn)的圖像拼接后變形越大。本文將具體介紹一下這如何實(shí)現(xiàn),需要的可以參考一下2021-12-12

