0

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

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

理想的做法是保持停止和启动功能,并每 0.3 秒触发一次,但不必明确表示我希望它每 x 秒触发一次。0.5 是完全任意的,只是设置为 > 0.3。

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

或者有没有更好的方法来获得这个功能?

4

1 回答 1

1

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

在大多数情况下,这是我的主线程,据我所知,在主线程内睡觉将是一件坏事

一些可能更适合您的替代设计。

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

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

  3. 用它自己的 RunLoop 甚至你自己的 while 循环来生成一个后台线程,它只处理睡眠的重新调度。

这些也大致按照我做的顺序,因为 1 号对我来说似乎最干净,其次是 2 号。No.3 虽然可行,但可能会带来很多潜在的麻烦(线程问题、干净关闭等)

于 2010-02-03T14:51:28.670 回答