我需要找到一种方法来在完全毫秒的时间内触发C ++函数的执行。
我需要播放一个循环并且每40毫秒或更短时间运行一个函数。但为了简单起见,让我们保持40毫秒。 我试图进行睡眠(40),但该方法不是在确切的时间点触发。
我只是想知道是否有另一种方法可以同步动作,然后在无限循环中使用Sleep()。
我甚至尝试以最大速度播放循环(CPU达到20%)并测量系统时差。然后在40 ms过去后触发动作。
在这两种情况下,我都遇到了延迟,但最糟糕的情况是延迟总是不同。
循环在线程中运行。
我试图给线程更优先,但没有成功。
其他信息
服务器正在Windows 7操作系统上运行。
答案 0 :(得分:0)
您可以使用timeGetTime:
等功能跟踪时间void main()
{
unsigned int last_call_time = timeGetTime();
while(true)
{
do_something_else();
unsigned int now_time = timeGetTime();
if(now_time > (last_call_time + 40))
{
call_time_critical_function();
last_call_time = timeGetTime();//last time is re initialized
}
}
}
timeGetTime
是标准的Windows函数,用于跟踪以毫秒为单位的时间。如果函数不够精确,你必须使用能跟踪纳秒的东西,如QueryPerformanceCounter,网上有很多关于如何使用这个函数的例子。