簡體   English   中英

std :: chrono :: time_point設置為現在

[英]std::chrono::time_point set to now

我對std :: chrono上的庫和文檔仍然很陌生,對我來說不起作用。

我正在嘗試實現包含時間戳記的對象的容器。 對象將按照從最新到最近的順序存儲,我決定嘗試使用std :: chrono :: time_point表示每個時間戳。 處理數據的線程將定期喚醒,處理數據,查看何時需要再次喚醒,然后在該時間內休眠。

static std::chrono::time_point<std::chrono::steady_clock, std::chrono::milliseconds> _nextWakeupTime;

我的印象是上面的聲明使用了毫秒級的固定時鍾。

下一步是將_nextWakeupTime設置為now;

_nextWakeupTime = time_point_cast<milliseconds>(steady_clock::now());

該行將無法編譯:

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'std::chrono::time_point<_Clock,_Duration>' (or there is no acceptable conversion)
        with
        [
            _Clock=std::chrono::system_clock,
            _Duration=std::chrono::milliseconds
        ]
        chrono(298): could be 'std::chrono::time_point<_Clock,_Duration> &std::chrono::time_point<_Clock,_Duration>::operator =(const std::chrono::time_point<_Clock,_Duration> &)'
        with
        [
            _Clock=std::chrono::steady_clock,
            _Duration=std::chrono::milliseconds
        ]
        while trying to match the argument list '(std::chrono::time_point<_Clock,_Duration>, std::chrono::time_point<_Clock,_Duration>)'
        with
        [
            _Clock=std::chrono::steady_clock,
            _Duration=std::chrono::milliseconds
        ]
        and
        [
            _Clock=std::chrono::system_clock,
            _Duration=std::chrono::milliseconds
        ]

我了解在Windows系統上,stead_clock與system_clock是同一件事,但是我不知道這里發生了什么。 我知道我可以這樣做:

_nextWakeupTime += _nextWakeupTime.time_since_epoch();

我只是覺得這不代表我應該做的事。


同樣,實例化給定時鍾/持續時間的time_point對象並將其設置為現在的最佳方法是什么?

您要做的最簡單的事情是給_nextWakeupTime類型steady_clock::time_point

steady_clock::time_point _nextWakeupTime;

您可以使用steady_clock::time_point::period來查詢此time_point的分辨率,該分辨率為帶有靜態成員numdenstd::ratio

typedef steady_clock::time_point::period resolution;
cout << "The resolution of steady_clock::time_point is " << resolution::num
     << '/' <<resolution::den << " of a second.\n";

從錯誤消息中可以看出,您的供應商已將system_clock::time_pointsteady_clock::time_point為相同的time_point ,因此它們共享相同的紀元,因此您可以在算術中將二者混用。 為了方便地處理這種情況,您可以使用以下命令查詢time_point的時鍾:

time_point::clock

即在您的實現steady_clock::time_point::clock不是steady_clock而是system_clock 如果您確實想要一個與steady_clock::time_point兼容但具有毫秒分辨率的time_point ,則可以執行以下操作:

time_point<steady_clock::time_point::clock, milliseconds> _nextWakeupTime;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM