Question Convertir l'heure de la haute résolution en un entier (Chrono)


Je veux être capable d'obtenir une précision de la nanoseconde avec la bibliothèque chrono, mais je n'arrive pas à comprendre comment convertir std::chrono::high_resolution_clock::now() dans long int. J'ai essayé ceci:

#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;
}

Mais cela m'a donné l'erreur: error C2440: 'initializing' : cannot convert from 'std::chrono::system_clock::time_point' to 'long' Comment puis-je le convertir en un int 64 bits? Si je ne peux pas alors je ne vois pas comment chrono est utile.


10
2017-08-02 17:36


origine


Réponses:


Les travaux suivants avec GCC 4.8 sur Linux:

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

14
2017-08-02 17:45



Tout d'abord, convertissez le point temporel renvoyé par now() dans la durée depuis un point connu. Cela peut être soit l’époque de l’horloge:

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

ou un point que vous avez choisi:

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

Ensuite, vous pouvez obtenir le nombre de nanosecondes en convertissant et en extrayant le nombre:

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

ou en divisant par la granularité souhaitée:

auto nanos = since_epoch / nanoseconds(1);

Comme indiqué dans les commentaires, ne faites que cette dernière conversion (qui laisse le système de saisie de la bibliothèque Chrono, perdant des informations précieuses sur le nombre) si vous avez réellement besoin d’une quantité scalaire; peut-être parce que vous interagissez avec une API qui n'utilise pas les types standard. Pour vos propres calculs, les types devraient vous permettre d’effectuer toute opération arithmétique utile.


3
2017-08-02 18:25



Une version plus succincte de la réponse de 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());

0
2017-10-29 21:39



Vous pouvez utiliser un std :: chrono :: duration_cast:

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


-3
2017-08-02 17:40