web-dev-qa-db-fra.com

std :: chrono et cout

J'ai un problème stupide. J'essaie de passer aux en-têtes c ++ 11 et l'un d'eux est chrono. Mais mon problème est que je ne peux pas connaître le résultat des opérations de temps. Par exemple:

auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_Epoch();

donne:

initialisation de l'argument 1 de ‘std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char, _Traits = std::char_traits<char>, _Tp = std::chrono::duration<long int, std::ratio<1l, 1000000l> >]’ ... /usr/include/c++/4.6/ostream

cout<<(uint64_t)t.time_since_Epoch();

donne un casting invalide

30
NoSenseEtAl

Une recherche rapide sur Google a trouvé cette page: http://en.cppreference.com/w/cpp/chrono/duration , où vous pouvez trouver un exemple d'impression d'une durée.

Edit: il a été déplacé vers http://en.cppreference.com/w/cpp/chrono/duration/duration_cast

22

Comme d'autres l'ont noté, vous pouvez appeler la fonction membre count() pour obtenir le nombre interne.

Je voulais ajouter que j'essaie d'ajouter un nouvel en-tête: <chrono_io> à cette bibliothèque. Il est documenté ici . Le principal avantage de <chrono_io> Par rapport à la simple utilisation de count() est que les unités de compilation sont imprimées pour vous. Ces informations peuvent bien sûr être obtenues manuellement, mais il est beaucoup plus facile de disposer de la bibliothèque pour vous.

Pour moi, votre exemple:

#include <iostream>
#include <chrono_io>

int main()
{
    auto t = std::chrono::high_resolution_clock::now();
    std::cout << t.time_since_Epoch() << '\n';
}

Les sorties:

147901305796958 nanoseconds

Le code source pour ce faire est open source et disponible sur le lien ci-dessus. Il se compose de deux en-têtes: <ratio_io> Et <chrono_io>, Et d'une source: chrono_io.cpp.

Ce code doit être considéré comme expérimental. Ce n'est pas standard et ne sera certainement pas normalisé tel quel. En effet, les commentaires préliminaires du LWG indiquent qu'il préférerait que la sortie par défaut soit ce que ce logiciel appelle la "forme abrégée". Cette sortie alternative peut être obtenue avec:

std::cout << std::chrono::duration_fmt(std::chrono::symbol)
          << t.time_since_Epoch() << '\n';

Et sorties:

147901305796958 ns
38
Howard Hinnant

Si vous voulez un chronométrage en résolution de millisecondes, voici comment vous pouvez le faire:

auto t1 = std::chrono::high_resolution_clock::now();
//process to be timed
auto t2 = std::chrono::high_resolution_clock::now();
std::cout << "process took: "
    << std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1).count()
    << " milliseconds\n";

N'oubliez pas d'ajouter parmi les en-têtes inclus:

#include <chrono> //timing
9
Yonatan Simson

Vous ne savez pas ce que vous attendez de cette distribution, peut-être que vous vouliez t.time_since_Epoch().count()?