ios中的“精确”采样周期

时间:2013-01-03 16:41:20

标签: ios nstimer timing sampling

我定期向RC直升机发送数据,目前我正在使用NSTimer,时间间隔为30毫秒。现在由于NSTimer的不精确和ios的非实时性,我在样本时间上遇到了很大的差异。 (前30毫秒中有5个数据包,4个循环后没有任何数据等)。是否有更精确的方法来处理ios中的数据采样和功能定时?

1 个答案:

答案 0 :(得分: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
    }
}