我需要找到一种在精确的毫秒周期内触发C++函数执行的方法。
我需要播放一个循环并每40毫秒或更短的时间运行一个函数。但为简单起见,让我们保持40毫秒。
我尝试放置一个Sleep(40),但是该方法未在确切的时间点触发。
我只是想知道是否还有另一种同步 Action 的方法,然后在无尽的while循环中使用Sleep()。
我甚至尝试以最大速度播放一个循环(CPU达到20%)并测量系统时间差。经过40毫秒后触发 Action 。
在这两种情况下,我都遇到延迟,但最糟糕的情况是延迟总是不同的。
循环正在线程中运行。
我试图给该线程更大的优先级,但是没有成功。
附加信息
服务器正在Windows 7操作系统上运行。
最佳答案
您可以使用诸如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),并且在网络上有很多有关如何使用此函数的示例。
关于c++ - 如何以精确的毫秒间隔运行C++函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19895434/