Ответ 1
Быстрый поиск по поиску нашел эту страницу: http://en.cppreference.com/w/cpp/chrono/duration, где вы можете найти пример длительности печати.
Изменить: он переместился в http://en.cppreference.com/w/cpp/chrono/duration/duration_cast
У меня есть глупая проблема. Я пытаюсь переключиться на заголовки С++ 11, и один из них - хронограф. Но моя проблема в том, что я не могу выполнить результат операций времени. Например:
auto t=std::chrono::high_resolution_clock::now();
cout<<t.time_since_epoch();
дает:
инициализирующий аргумент 1 из
‘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();
дает недопустимый листинг
Быстрый поиск по поиску нашел эту страницу: http://en.cppreference.com/w/cpp/chrono/duration, где вы можете найти пример длительности печати.
Изменить: он переместился в http://en.cppreference.com/w/cpp/chrono/duration/duration_cast
Как отмечали другие, вы можете вызвать функцию члена count()
, чтобы получить внутренний счет.
Я хотел добавить, что я пытаюсь добавить новый заголовок: <chrono_io>
в эту библиотеку. Здесь описано здесь. Основным преимуществом <chrono_io>
только при использовании count()
является то, что единицы времени компиляции распечатываются для вас. Разумеется, эту информацию можно получить вручную, но гораздо проще иметь библиотеку для вас.
Для меня ваш пример:
#include <iostream>
#include <chrono_io>
int main()
{
auto t = std::chrono::high_resolution_clock::now();
std::cout << t.time_since_epoch() << '\n';
}
Выходы:
147901305796958 nanoseconds
Исходный код для этого является открытым исходным кодом и доступен по ссылке выше. Он состоит из двух заголовков: <ratio_io>
и <chrono_io>
, и 1 источник: chrono_io.cpp
.
Этот код следует считать экспериментальным. Он не является стандартным и почти наверняка не будет стандартизирован, как есть. Действительно, предварительные комментарии LWG показывают, что они предпочли бы, чтобы выход по умолчанию был тем, что это программное обеспечение называет "короткой формой". Этот альтернативный выход можно получить с помощью:
std::cout << std::chrono::duration_fmt(std::chrono::symbol)
<< t.time_since_epoch() << '\n';
И выходы:
147901305796958 ns
Не уверен, чего вы ожидаете от этого актера, возможно, вы хотели t.time_since_epoch().count()
?
Если вам требуется синхронизация в разрешении миллисекунд, вы можете это сделать:
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";
Не забудьте добавить среди включенных заголовков:
#include <chrono> //timing