触发代码中的NSTimer间隔小于sleep命令

时间:2010-02-03 05:56:38

标签: objective-c cocoa nstimer

我有一段我希望重复执行的代码,但能够暂停和恢复它。为此,我使用了NSTimer,我可以根据需要停止并启动。

在代码段中,我使用sleep命令等待更新内容(0.3秒)。计时器每0.5秒发射一次。

理想的是保持停止和启动功能,每0.3秒发射一次,但不必明确说我希望每隔x秒发射一次。 0.5是完全任意的,并且设置为> 0。 0.3。

如果我将计时器设置为每0.01秒触发一次,但是将代码中的sleep命令保持为0.3秒,我是否会获得所需的行为?或者计时器是否会备份所有事件,并产生意外结果(例如我停止后多次点火)?通过这种方式,我可以将0.3秒的睡眠时间变为变量,并且每当我将其增加到0.5以上时都不必更改计时器。

或者有更好的方法来获得此功能吗?

1 个答案:

答案 0 :(得分:1)

我看到的最大问题之一是NSTimer将在其注册的任何线程上消耗时间。

在大多数情况下,对我来说这是我的主线程,就我所见,在主线程内部睡觉会是坏事

一些可能对您更好的替代设计。

  1. 不要睡觉。让计时器调用的选择器执行'我暂停'检查并提前退出。

  2. 暂停时使NSTimer无效并在取消暂停时重新创建它(注意:您不能只是重新安排旧计时器。)

  3. 使用自己的RunLoop或甚至你自己的while循环生成一个后台线程,它只是处理睡眠时的重新安排。

  4. 这些也大致按照我要做的顺序,因为对我来说排名第一是最干净的,其次是2号。 No.3虽然可行会引入很多潜在的肮脏(穿线问题,干净关闭等)