Мне нужно выполнить некоторую функцию, точную в 20
миллисекундах (для отправки пакетов RTP) после некоторого события. Я попытался следующие варианты:Подождите с точностью до 20 миллисекундов
std::this_thread::sleep_for(std::chrono::milliseconds(20));
boost::this_thread::sleep_for(std::chrono::milliseconds(20));
Sleep(20);
также различные извращения, как:
auto a= GetTickCount();
while ((GetTickCount() - a) < 20) continue;
также попытался микро- и наносекунд.
Все эти методы имеют ошибку в диапазоне от -6ms
до +12ms
, но ее неприемлемы. Как заставить его работать правильно?
Мое мнение, что + -1ms приемлемо, но не более.
Update1: для измерения времени прошло я использую std::chrono::high_resolution_clock::now();
Вы используете поток и таймер для этого? – ChrisF
Вы уверены, что таймер для измерения ожидаемого времени является точным? – MikeCAT
Какие ОС включены? – antiHUMAN