如何以精确的毫秒间隔运行c ++函数

时间:2013-11-10 21:30:43

标签: c++ multithreading timer sleep milliseconds

我需要找到一种方法来在完全毫秒的时间内触发C ++函数的执行。

我需要播放一个循环并且每40毫秒或更短时间运行一个函数。但为了简单起见,让我们保持40毫秒。 我试图进行睡眠(40),但该方法不是在确切的时间点触发。

我只是想知道是否有另一种方法可以同步动作,然后在无限循环中使用Sleep()。

我甚至尝试以最大速度播放循环(CPU达到20%)并测量系统时差。然后在40 ms过去后触发动作。

在这两种情况下,我都遇到了延迟,但最糟糕的情况是延迟总是不同。

循环在线程中运行。

我试图给线程更优先,但没有成功。

其他信息

服务器正在Windows 7操作系统上运行。

1 个答案:

答案 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,网上有很多关于如何使用这个函数的例子。