0

我正在定期向 RC 直升机发送数据,目前我正在使用时间间隔为 30 毫秒的 NSTimer 来执行此操作。现在由于 NSTimer 的不精确性和 ios 的非实时性,我与采样时间有很大的差异。(前 30 毫秒内有 5 个数据包,然后在 4 个周期内什么都没有)。是否有更精确的方法来处理 ios 中的数据采样和函数计时?

4

1 回答 1

1

你可以做一些你通常在游戏中做的事情来微调 fps(同时保持逻辑和绘画分开,使其在任何 fps 中都能正常工作)。像这样,并在后台线程中调用它:

- (void)updateLoop
{
    NSTimeInterval last = CFAbsoluteTimeGetCurrent();
    NSTimeInterval elapsed = 0;
    while (self.running) {
        NSTimeInterval now = CFAbsoluteTimeGetCurrent();
        NSTimeInterval dt = now - last;

        elapsed += dt;

        if (elapsed >= YOUR_INTERVAL) {
            //Do stuff
            elapsed = 0;
        }

        last = now;

        [NSThread sleepForTimeInterval:0.001]; //There is not NSThread yield
    }
}
于 2013-01-03T17:47:03.830 回答