我有一个 - (void)方法被执行,并且在某一时刻它会进入一个while循环,它会在它要求时直接从加速度计获取值
我浏览了有关NSTimer类的文档,但我无法理解我在这种情况下如何使用此对象:
e.g。
-(void) play
{
......
...
if(accelerationOnYaxis >0 && accelerationOnYaxis < 0.9 )
{
startTimer;
}
while(accelerationOnYaxis >0 && accelerationOnYaxis < 0.9)
{
if(checkTimer >= 300msec)
{
printOut_AccelerationStayedBetweenThoseTwoValuesForAtLeast300msecs;
break_Out_Of_This_Loop;
}
}
stopTimerAndReSetTimerToZero;
.....
more code...
....
...
}
任何帮助?
答案 0 :(得分:3)
您无法使用NSTimer
执行此操作,因为它需要您的代码才能退出才能触发。 NSTimer
使用事件循环来决定何时给您回电;如果你的程序在其while
循环中持有控件,那么定时器就无法触发,因为检查是否有时间触发的代码永远不会到达。
最重要的是,在一个繁忙的循环中停留将近一秒半将耗尽你的电池。如果您只需要等待1.4s
,那么最好打电话给sleepForTimeInterval:
,如下所示:
[NSThread sleepForTimeInterval:1.4];
您还可以使用<time.h>
中的clock()
来衡量短时间间隔,例如:
clock_t start = clock();
clock_t end = start + (3*CLOCKS_PER_SEC)/10; // 300 ms == 3/10 s
while(accelerationOnYaxis >0 && accelerationOnYaxis < 0.9)
{
if(clock() >= end)
{
printOut_AccelerationStayedBetweenThoseTwoValuesForAtLeast300msecs;
break_Out_Of_This_Loop;
}
}
答案 1 :(得分:1)
NSTimer
与您想要的有点不同。你需要的是一个计时器的计数器,以获得它循环的次数。如果你的计数器上14(如果它是一个整数),你可以使它无效。
//start timer
NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.1
target:self
selector:@selector(play:)
userInfo:nil
repeats:YES];
//stop timer
[timer invalidate];
你可以在没有这个的情况下创建你的功能。
- (void)play {
......
...
counter++; //declare it in your header
if(counter < 14){
x++; //your integer needs to be declared in your header to keep it's value
} else {
[timer invalidate];
}
useValueofX;
}