我有一个正在执行的 -(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...
....
...
}
有什么帮助吗?
你不能这样做NSTimer
,因为它需要您的代码退出才能触发。NSTimer
使用事件循环来决定何时给您回电;如果你的程序拥有控制权while
循环中,计时器无法触发,因为永远不会到达检查是否到了触发时间的代码。
最重要的是,在繁忙的循环中停留近一秒半会耗尽你的电池。如果您只是需要等待1.4s
,你最好打电话sleepForTimeInterval:
, 像这样:
[NSThread sleepForTimeInterval:1.4];
您还可以使用clock() http://www.cplusplus.com/reference/clibrary/ctime/clock/ from <time.h>
测量短时间间隔,如下所示:
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;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)