2个定时器之间的差异

Posted

技术标签:

【中文标题】2个定时器之间的差异【英文标题】:Discrepancy between 2 timers 【发布时间】:2013-08-30 01:36:03 【问题描述】:

我的游戏中需要两个计时器,一个以秒为单位计数,另一个以毫秒为单位。我有 2 个标签、函数和变量。第一个函数的间隔为 1.0,另一个函数的间隔为 0.001。但是 0.001 计时器总是比 1.0 慢(例如 700ms 和 1s)。我该如何解决?

【问题讨论】:

期望任何东西在非硬实时操作系统上以 1KHz 可靠地执行会招致失望。 然而,1 秒内 700 毫秒。即使@1KHz 也超出了容忍范围......除非,user2719716,您在几分钟内累积了这些总数,并且只向我们展示了平均不良结果。如果是这样,那么 ipmcc 已经解决了您的问题。 【参考方案1】:

您永远不应假设在 N 毫秒触发的计时器将在该时间间隔被调用。

计时器被设计为在等待至少 N 毫秒后触发,并且由于线程优先级,它几乎肯定会在更长的等待后触发。

此外,如果您在计时器触发器中处理的时间超过一毫秒,您将基本上“跳过”一些触发器并获得您描述的较低值。

要获取经过的时间,请使用日期差异,而不是计时器。

Getting the time elapsed (Objective-c)

【讨论】:

好吧,假设我需要秒表而不是计时器。我需要他在一秒钟后显示 1000 毫秒。那我该怎么办? 当您启动“秒表”时保存日期时间,然后在每次调用计时器时,通过将保存的时间与“现在”进行比较来检查经过了多少毫秒。显示此值,一旦 > 1000 就停止或执行任何操作。【参考方案2】:

hmmm ...为什么不只使用一个计时器并标记 1k ms。一秒钟。 ?设置标志,调用函数。等等。我想不出一个需要多个计时器的充分理由(除了为硬件提供服务的微控制器,但显然这不是你在做的事情)。

【讨论】:

这不是问题。问题是,当 1k ms 过去时,实际上过去了超过 1 秒。 在两个计时器上 ???您使用的是哪个版本的 ios 和什么设备?也许你最好发布你的代码——这个需要被复制。 (很难相信你所说的正在发生!但我确实给你怀疑的好处。我们总是可以在代码方面提供更多帮助。【参考方案3】:

你为什么要计算秒数?你不应该根据时钟开始和当前时钟之间的差异来计算时间吗?这将使计时器匹配,因为它们来自相同的参考。听起来您实际上是在根据计时器任务进行计数。这将使累积时间取决于线程执行等。

【讨论】:

以上是关于2个定时器之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

系统梳理主流定时器算法实现的差异以及应用

jmeter(六)-定时器

以纳秒为单位的快速日期差异不起作用

Jenkins 设置定时任务

sql server使用维护计划定时备份完整数据库差异数据库

多线程和定时器之间的关系