Получить хроно секунд в плавании

В примере на http://en.cppreference.com/w/cpp/chrono значение секунд получается в double, Это поведение, которое я хочу. Тем не менее, это, кажется, полагается на неявное предположение, что вычитание временной точки дает значение, которое представляет секунды. Я не могу найти ничего, что объясняет, почему длительность дает числа с плавающей запятой, когда единицы времени фактически не указаны. Без использования auto вообще, может кто-то показать, как явно получить единицу времени, например, секунды, в типе с плавающей запятой, или указать мне на документацию или объяснение, почему вышеупомянутое преобразование представляет секунды?

Рассматриваемое преобразование по существу:

std::chrono::time_point<std::chrono::system_clock> start = std::chrono::system_clock::now();
std::chrono::time_point<std::chrono::system_clock> end = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds = end-start; // why does this represent seconds as opposed to some other time unit?
double secondsInDouble = elapsed_seconds.count();

Смотрите следующие посты для примеров преобразования.

Как получить длительность, в виде миль и секунд с плавающей точкой от <хроно>?

C ++ chrono — получает длительность как float или long long

получать хронографическое время определенным образом

Таймер хронографа не правильно конвертирует секунды

5

Решение

Согласно этому: http://en.cppreference.com/w/cpp/chrono/duration коэффициент по умолчанию для второго параметра шаблона 1:1 смысл секунд.

Другие значения являются отношениями относительно этого. Например, соотношение для std::chrono::milliseconds является 1:1000 http://en.cppreference.com/w/cpp/numeric/ratio/ratio

Итак, это утверждение:

std::chrono::duration<double> elapsed_seconds = end-start;

эквивалентно:

std::chrono::duration<double, std::ratio<1>> elapsed_seconds = end-start;

Который определяется как секунды, из которых получены все остальные соотношения.

Какими бы ни были единицы end - start определены в преобразуются в std::ratio<1> как в секунд.

Если вы хотите время в миллисекундах, вы можете сделать:

std::chrono::duration<double, std::ratio<1, 1000>> elapsed_milliseconds = end-start;

А также end - start следует перевести в соответствии с новым соотношением.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]