Я проголосовал за ответ Р. Мартиньо Фернандеса, потому что я считаю, что он предлагает самый ясный, самый простой ответ на вопрос. Однако я хотел добавить немного кода, который показал бы немного больше <chrono>
функциональности и который отвечал на эту часть вопроса ОП:
могу ли я как-то хотя бы подсчитать в наносекундах минимум
представительная продолжительность времени между тиками?
И нецелесообразно помещать столько информации в комментарии. Но я иначе рассматриваю этот ответ как поддерживающий комментарий к ответу Р. Мартиньо Фернандеса.
Сначала код, а затем объяснение:
#include <iostream>
#include <chrono>
template <class Clock>
void
display_precision()
{
typedef std::chrono::duration<double, std::nano> NS;
NS ns = typename Clock::duration(1);
std::cout << ns.count() << " ns\n";
}
int main()
{
display_precision<std::chrono::high_resolution_clock>();
display_precision<std::chrono::system_clock>();
}
Сначала я создал nanosecond
, который использует double
в качестве представления (NS
). Я использовал double
на всякий случай, когда мне нужно было показать доли наносекунды (например, 0.5 ns
).
Далее, у всех часов есть вложенный тип с именем duration
. Это chrono::duration
, который будет иметь те же std::ratio
, и, следовательно, те же num
и den
, как указано в ответе Р. Мартиньо Фернандеса. Один из этих duration
с, преобразованный в NS
, даст нам сколько наносекунд за один такт Clock
. И это значение можно извлечь из duration
с помощью функции-члена count()
.
Для меня эта программа распечатывает:
1 ns
1000 ns