Перекрестная платформа Millisecond таймер длится более 49 дней?

StackOverflow https://stackoverflow.com/questions/2585280

  •  24-09-2019
  •  | 
  •  

Вопрос

Я собираюсь разрабатывать небольшой выделенный сервер в C / C ++, который потребует времени работы навсегда. Я смотрел в некоторые функции времени, поскольку Millisecond Timing требуется для расчетов. У меня есть 2 проблемы с которыми я сталкиваюсь:

  1. Используя 32-битное целое число для хранения количества миллисекундов, поскольку операция начала, будет обернуть около 49 дней сброса на ноль. Я подумал об использовании 64 битов целых чисел, используя GetTimeOfDay, чтобы получить микросекунд, но это приводит меня к второй части.

  2. Кажется, что нет никаких стандартных системных вызовов для пробелов миллисекунд, которые являются независимыми платформой

Что я должен сделать, чтобы разрешить оба эти проблемы?

Это было полезно?

Решение

  1. Используйте 64-битное целое число, предполагаю, что дает вам достаточно времени

  2. Ты прав; Там нет стандарта. Одной из возможностей будет использовать Boost DateTime Библиотека, поочередно найти другую или свернуть свои собственные.

Удачи!

Другие советы

Как уже говорилось, первая проблема, которую вы собираетесь противостоять, собирается получить надежное миллисеконтность-точное время.

Я признаю, что я немного поэтапный вопрос, хотя.

Я могу понять необходимость точных синхронизации (миллисекундного уровня, даже микросекунда), но сроки через 50 дней на миллисекундном уровне кажется ... странно.

Вы должны сначала просмотреть ваши потребности, но редко нужно больше 6 или 7 важных цифр ... И я боюсь, что вы пытаетесь получить один размер, подходящий им все объект продолжительности.

Возможно, что вы должны вместо этого классифицировать ваши продолжительности:

  • Несколько минут максимум> использовать миллисекундную точность
  • В противном случае> Используйте вторую точность (знаменитый счет с 1 января 1970 года)

Потому что ... Что такое ощущение 1/10 секунды в масштабе 2 месяца?

Очевидный. Используйте 64-битные целые числа с конкретным платформой кода для получения количества миллисекунд. На Unix, включая OSX, вы хотите gettimeofday. Отказ В Windows, удачи получить надежную миллисекундно-гранулярность источника времени; то код в библиотеке TCL, чтобы сделать это действительно сложный, так как в этом районе есть злые джасы.

Ответьте на 1: Если «Millisecond Timing», которые вы измеряете, находится в пределах около 20 дней, вы можете вычтете время в качестве значения без знака и проверять результат в качестве подписанного значения. Это должно дать правильный результат с таймерами обертывания (обертывание от 0xFFFFFFFF для 0x00000000). Если ваше время более 20 дней, вам нужно больше битов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top