【发布时间】:2016-04-14 12:45:36
【问题描述】:
我需要在某些事件之后在20 毫秒(用于发送 RTP 数据包)内执行一些准确的功能。我尝试了下一个变体:
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();
【问题讨论】:
-
您是否使用线程和计时器来执行此操作?
-
您确定测量等待时间的计时器准确吗?
-
也许this answer 对 SO 有帮助。
-
@ChrisF 现在我在一个(主)线程的空项目中对其进行测试。
-
@MikeCAT 我发现 GetTickCount() 不准确。但首先我使用了 std::chrono::high_resolution_clock::now();