如何重置high_resolution_clock :: time_point

时间:2016-02-02 08:34:25

标签: c++ c++11 chrono

我正在开发一个类Timer,其某些成员的类型为high_resolution_clock::time_point,其中time_point定义为typedef chrono::time_point<system_clock> time_point;

问题

此对象的默认值是什么?

我需要从以下几个方面了解这个价值:

  1. 了解会员是否已初始化
  2. 实施Timer::Reset()功能
  3. 背景

    class Timer
    {
        void Start() { m_tpStop = high_resolution_clock::now(); }
        void Stop() { m_tpStart = high_resolution_clock::now(); }
    
        bool WasStarted() { /* TO-DO */ }
    
        void Reset();
        __int64 GetDuration();
    
        high_resolution_clock::time_point m_tpStart;
        high_resolution_clock::time_point m_tpStop;
    };
    

    那么,我是否可以仅通过查看成员Timer::WasStarted来实施m_tpStart?我不想为此目的添加布尔成员。

1 个答案:

答案 0 :(得分:7)

  

那么,我可以通过仅查看成员m_tpStart来实现Timer :: WasStarted吗?

好吧,如果你定义了这样的不变量,那么m_tpStart为零(纪元)当且仅当计时器被重置(未启动)时,它才是微不足道的。只需检查start是否为epoch以测试计时器是否已启动。

究竟如何设置一个时间点到epoch,似乎有点复杂 - 我想这就是你所指的“如何重置high_resolution_clock :: time_point ”。您需要复制 - 指定默认构造的时间点。

void Start() { m_tpStart = high_resolution_clock::now(); }
void Stop() {
    m_tpStop = high_resolution_clock::now();
}
bool WasStarted() {
    return m_tpStart.time_since_epoch().count(); // unit doesn't matter
}
void Reset() {
    m_tpStart = m_tpStop = {};
}