代码之家  ›  专栏  ›  技术社区  ›  Ian1971

使用nstimer获得精确的计时

  •  2
  • Ian1971  · 技术社区  · 17 年前

    我需要用非常精确的时间运行我的游戏循环。我试着用nstimer来做这个,我得到了不错的结果,但是有一点漂移。 当nstimer激发时,下次事件开始计数是在处理程序完成时,还是直接开始计数。 如果前者是合理的,我可以使用setFireDate来尝试抵消下一次计时器触发-当我尝试时,情况似乎更糟。

    我的计时器设置为每44毫秒点火一次,我想阻止它漂移超过20毫秒。如果它确实漂移,我想纠正它,以备下次点火。 这是一个合理的尝试和做的时间?

    3 回复  |  直到 17 年前
        1
  •  4
  •   Peter Hosey    17 年前

    您可以尝试创建一个线程并在该线程的运行循环上调度计时器。将该计时器作为运行循环上唯一的东西应该限制可以干扰它的事物的数量。

    如果这不起作用,那么,您已经让它在一个线程上工作了,所以您也可以切换到usleep()循环。

        2
  •  5
  •   Daniel Dickison    17 年前

    我认为nstimer不会给你“非常”准确的时间。它在运行循环中触发,所以如果它在您的主线程中,那么它将被从UI更新到事件处理的一切延迟。

        3
  •  1
  •   Dimitris    17 年前

    还请记住,nstimer文档说明:

    由于各种输入源 典型的运行循环管理, 有效解决时间 计时器的间隔限制为打开 50-100毫秒的顺序。如果A 定时器的点火时间发生在 运行循环的模式不是 监视计时器或在长时间内 调用,计时器直到 下次运行循环检查 计时器。因此,实际时间为 计时器可能触发的 之后的一段重要时间 预定的射击时间。