1

我需要找到一种在精确的毫秒周期内触发 C++ 函数执行的方法。

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

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

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

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

循环在线程中运行。

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

附加信息

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

4

1 回答 1

1

您可以使用诸如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,并且网上有很多关于如何使用此函数的示例。

于 2013-11-10T21:40:09.227 回答