high_resolution_clock - это псевдоним для часов с наибольшим доступным разрешением:
Класс std :: chrono :: high_resolution_clock представляет часы с наименьшим периодом тиков, предоставленнымреализация.Это может быть псевдоним std :: chrono :: system_clock или std :: chrono :: stable_clock или третий независимый тактовый генератор.
Это может объяснить разное время, которое вы получаете на разных компиляторах.
stable_clock Не гарантирует, что даст время, которое имеет смысл, но хорошо для сохранениявремя отслеживания:
Эти часы не связаны со временем настенных часов (например, это может быть время с момента последней перезагрузки) и наиболее подходят для измерения интервалов.Есть ли способ исправить код, чтобы он корректно работал во всех компиляторах?Мне нужен high_resolution_clock, чтобы получить доступ к миллисекундам.
system_clock представляет часы вашей ОС:
Класс std :: chrono :: system_clock представляетобщесистемные настенные часы реального времени.
Возможно, они не монотонны: в большинстве систем системное время можно отрегулировать в любой момент.Это единственные часы C ++, которые могут отображать свои временные точки на время в стиле C и, следовательно, отображаться (до C ++ 20).
Если вам нужны миллисекунды даты или времени, используйте std :: chrono :: system_clock, но если вам просто нужно отслеживать пройденное время, используйте std :: chrono :: high_resolution_clock.
Чтобы получить количество миллисекунд с момента запуска system_clock:
auto timePoint = std::chrono::system_clock::now();
auto ms = std::chrono::duration_cast<std::chrono::milliseconds>
(timePoint.time_since_epoch());
std::cout << "since epoch: " << ms.count() << " ms";
над фрагментом кода должно работать в большинстве операционных систем и компиляторов, хотя не гарантируется, что time_since_epoch вернет время с 1970 года, нотолько для возврата времени с эпохи часов, что в большинстве случаев является вашим желаемым поведением.