гарантии для std::chrono::steady_clock::period
От: B0FEE664  
Дата: 24.06.15 10:34
Оценка:
День добрый!

Существуют ли в стандарте гарантии, что период steady_clock меньше одной секунды?

Имеет ли смысл следующий ассёрт:
    static_assert(std::ratio_less<std::chrono::steady_clock::period, std::chrono::seconds::period>::value, "the period is too big");

или эту проверку надо делать как-то иначе? Или она не имеет смысла?
И каждый день — без права на ошибку...
Re: гарантии для std::chrono::steady_clock::period
От: uzhas Ниоткуда  
Дата: 24.06.15 11:13
Оценка: 1 (1)
Здравствуйте, B0FEE664, Вы писали:

BFE>Существуют ли в стандарте гарантии, что период steady_clock меньше одной секунды?


при беглом просмотре стандарта я вообще не увидел каких-либо ограничений на значение периода в каких-либо часах
Re: гарантии для std::chrono::steady_clock::period
От: watchmaker  
Дата: 24.06.15 11:31
Оценка: 2 (1)
Здравствуйте, B0FEE664, Вы писали:

BFE>или эту проверку надо делать как-то иначе? Или она не имеет смысла?

Цитата из одной популярной реализации:
    // Why nanosecond resolution as the default?  
    // Why have std::system_clock always count in the higest
    // resolution (ie nanoseconds), even if on some OSes the low 3
    // or 9 decimal digits will be always zero? This allows later
    // implementations to change the system_clock::now()
    // implementation any time to provide better resolution without
    // changing function signature or units.

То есть вышеприведённая проверка не может всегда отловить неточные часы — steady_clock::period будет соответствовать наносекундам, но сами часы могут считать в секундах (заполняя 9 последних цифр нулями).

Так libstd++ и libc++ всегда безусловно возвращают наносекунды, вне зависимости от реальной точности часов — как минимум с этими реализациями проверка точно бесполезна.
Отредактировано 24.06.2015 11:35 watchmaker . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.