Так что мне нужно сделать точную синхронизацию и стараюсь использовать 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?
Просто используйте std::chrono
, или же boost::chrono
если вы застряли в прошлом тысячелетии. Стандарт устанавливает требования, сколько именно битов требуется для каждого блока, а API действительно отлично.
Количество требуемых битов (включая знаковый бит):
В течение наносекунд они будут работать до 2262 года.