2014-01-10 6 views
1

Если у меня есть следующие часы и используйте его, чтобы получить количество тиков с момента создания часов, то на самом деле это показатель.std :: chrono default duration for time_since_epoch

std::chrono::high_resolution_clock::now().time_since_epoch().count(); 

Например, я только что запустил это и получил 1389375799048790227. Что означает это число? Это наносекунды, микросекунды и т. Д.?

+0

Я бы сказал, что это зависит от типа 'duration'' high_resolution_clock'. Либо проверьте его (вложенный typedef), либо используйте «duration_cast» с известным типом продолжительности. – dyp

+0

См. Http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch – dyp

ответ

4

Тип продолжительности std::chrono::high_resolution_clock::duration. Вы можете проверить срок действия периода с помощью: std::chrono::high_resolution_clock::duration::period::num и std::chrono::high_resolution_clock::duration::period::den. Это числитель и знаменатель доли, представляющей количество секунд на отметку (например, 1/1000000000 за наносекунды).

Эпоха неуточненная, но для вас есть 1389375799048790227 клещей, когда вы получили этот результат.

2

вы всегда можете бросить его в нужную единицу времени с помощью duration_cast

using namespace std::chrono; 
auto time = duration_cast<seconds>(high_resolution_clock::now().time_since_epoch()); 

Теперь time.count() вернет количество секунд.

+0

Да, я знаю, что могу наложить его на что-то другое. Но что я спрашиваю, что произойдет, если я его не брошу? Я просто вызываю 'time_since_epoch()', который возвращает продолжительность, а затем вызывает 'count()'. Что означает это значение? Что это такое? –

+0

@SeanLynch Это количество тиков часов с эпохи этих часов (между моментом времени и эпохой). Как долго этот тик зависит от 'high_resolution_clock' вашей стандартной реализации библиотеки, аналогично, эпоха также определяется реализацией стандартной библиотеки. – dyp

1

Вы можете использовать трюк из пункта 4 Скотта Мейерс Эффективного Modern C++ сделать компилятор выявить тип сообщения об ошибке, например, так:

#include <chrono> 

template < typename T > 
struct TypeDiscloser; 

int main() { 
    auto epoch_time = std::chrono::high_resolution_clock::now().time_since_epoch(); 
    TypeDiscloser< decltype(epoch_time) > dummyVar; 
} 

На ideone, это дает следующее ошибка компилятора:

prog.cpp: In function 'int main()': 
prog.cpp:9:42: error: aggregate 'TypeDiscloser<std::chrono::duration<long long int, std::ratio<1ll, 1000000000ll> > > dummyVar' has incomplete type and cannot be defined 
    TypeDiscloser< decltype(epoch_time) > dummyVar; 
             ^

от ошибки компилятора, то тип:

std::chrono::duration<long long int, std::ratio<1ll, 1000000000ll> > 

Итак, на любой платформе ideone работает std::chrono::time_point::time_since_epoch() возвращает std::chrono::duration с тиковым периодом 1/1000000000 секунд или 1 наносекундой. Поэтому вызов count() по этой длительности возвращает наносекунды.

 Смежные вопросы

  • Нет связанных вопросов^_^