Что такое лучшая функция C ++ Chrono для отметки времени между двумя машинами - PullRequest
0 голосов
/ 31 октября 2018

Я нашел этот вопрос , относящийся к функции chrono time_since_epoch (). С ответами, приведенными в этой теме, мы можем добиться отметки времени на одной машине на нескольких платформах. У меня есть две машины, которые показывают две разные функции time_since_epoch () в микросекундах. Мне нужно пометить временную метку пакета, отправленного с одной машины на другую, чтобы вычислить задержку этого пакета.

В настоящее время я использовал

    uint64_t usCurrentTime = std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()).count(); 

функция, позволяющая получить текущее время с начала эпохи в микросекундах. Но задержка уменьшается, так как я сохраняю ее в uint64_t. Это потому, что обе машины не синхронизированы по времени. Как мне достичь своих потребностей, используя функции библиотеки хронографа

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Нет метки времени, к которой у вас есть готовый доступ, которая гарантирует, что метка времени получателя будет больше, чем метка времени отправителя. Единственными часами, которые производят значения, которые можно осмысленно сравнить между компьютерами, являются system_clock, и это «системное время», то есть то, что ваш компьютер отображает как текущее время; они не должны быть синхронизированы. Тебе нужно быть умнее.

C ++ 20 предложит tai_clock, utc_clock и gps_clock, один из которых может удовлетворить ваши потребности (но плохая синхронизация может привести к отрицательной разнице во времени!).

Возможный подход: машина 1 отправляет машине 2 пакет с отметкой времени std::chrono::high_resolution_clock. Машина 2 отправляет его обратно. Машина 1 получает возвращенный пакет и сравнивает полученную метку времени с std::chrono::high_resolution_clock::now(), а затем делит на 2.

0 голосов
/ 31 октября 2018

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

...