Как объединить время из tv_sec и tv_usec в одну сущность? Что безопасно?

Так что мне нужно сделать точную синхронизацию и стараюсь использовать tv_sec и tv_usec. Прямо сейчас у меня есть супер-беспорядочный вектор моего собственного класса Tuple, в котором есть и секунды, и микросеки.

Проблема здесь в том, что … если я хочу сказать … получить самую старую из записей в моем векторе, я должен сделать супер волосатые и грубые сравнения между значениями в кортежах.

Я бы очень хотел объединить tv_sec и tv_usec в одно значение для хранения. Это сделало бы сравнение очень простым.

Но как сделать это безопасно? Например, будет ли эта попытка ниже взорваться мне в лицо при определенных значениях?

gettimeofday(&tv, NULL);
time_t secs = tv.tv_sec;
time_t msecs = tv.tv_usec;
double the_answer = tv_sec + (1.0/1000000) * tv_usec; //ehhhh? Maybe?

Я полагаю, что вопрос сводится к — переполнится / будет вести себя странно / разрушит меня, если я буду его использовать:

    double the_answer = tv_sec + (1.0/1000000) * tv_usec; //ehhhh? Maybe?

0

Решение

Просто используйте std::chrono, или же boost::chrono если вы застряли в прошлом тысячелетии. Стандарт устанавливает требования, сколько именно битов требуется для каждого блока, а API действительно отлично.

Количество требуемых битов (включая знаковый бит):

  • 23 часа
  • 29 минут
  • 35 секунд
  • 45 за миллисекунды
  • 55 для микросекунд
  • 64 за наносекунды

В течение наносекунд они будут работать до 2262 года.

0

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


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector