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