簡體   English   中英

將高分辨率時鍾時間轉換為整數(Chrono)

[英]Convert high resolution clock time into an integer (Chrono)

我希望能夠使用chrono庫獲得納秒精度,但我無法弄清楚如何將std::chrono::high_resolution_clock::now()轉換為long int 我試過這個:

#include <chrono>
#include <iostream>
using namespace std;

int main() {
    typedef std::chrono::high_resolution_clock Clock;

    long int val = Clock::now();

    cout << val << endl;

    cin.ignore();
    return 0;
}

但這給了我錯誤: error C2440: 'initializing' : cannot convert from 'std::chrono::system_clock::time_point' to 'long'轉換error C2440: 'initializing' : cannot convert from 'std::chrono::system_clock::time_point' to 'long'如何將其轉換為64位int? 如果我不能,那么我不知道計時器是如何有用的。

以下適用於Linux上的GCC 4.8:

using namespace std::chrono;
auto now = high_resolution_clock::now();
auto nanos = duration_cast<nanoseconds>(now.time_since_epoch()).count();
std::cout << nanos << '\n';

首先,將now()返回的時間點轉換為自已知時間點以來的持續時間。 這可以是時鍾的時代:

auto since_epoch = Clock::now().time_since_epoch();

或者您選擇的某個時間點:

auto since_epoch = Clock::now() - my_epoch;

然后,您可以通過轉換和提取計數來獲得納秒數:

auto nanos = duration_cast<nanoseconds>(since_epoch).count();

或者通過划分您想要的任何粒度:

auto nanos = since_epoch / nanoseconds(1);

正如評論中所指出的那樣,如果你真的需要一個標量,那么只進行最后一次轉換(離開Chrono庫的類型系統,丟失有關數字含義的有價值信息); 也許是因為您正在與不使用標准類型的API進行交互。 對於您自己的計算,類型應該允許您執行您需要的任何有意義的算術。

一個更簡潔的版本的nosid的答案:

long int time = static_cast<long int>(std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count());

你可以使用std :: chrono :: duration_cast:

http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

暫無
暫無

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

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