【问题标题】:alternative for sleep function睡眠功能的替代品
【发布时间】:2010-11-30 20:57:47
【问题描述】:

我在我的应用程序中实现了以下功能。

for(i=0;!stopThroughButtons && i<totalMovements;i++){
        [NSThread detachNewThreadSelector:@selector(moveNeedle) toTarget:self withObject:nil];
        sleep(0.3);
    }

这里的sleep 是一个带有unsigned int 类型参数的函数。

Sleep 方法使用秒来休眠。

我想以毫秒为单位给出睡眠时间。

有哪些最佳替代方案可用?

【问题讨论】:

  • sleep() 是错误的答案。见下文。
  • 好的。但现在我已经从我的逻辑中删除了睡眠,我使用了计时器而不是睡眠和线程。好的@bbum。你的评论让我注意到了这一点。

标签: iphone sleep


【解决方案1】:

您可能需要nanosleep(),这需要纳秒。但请记住,这些睡眠时间并不准确,因此您真正拥有的是能够比百分之几秒更准确地指定它。

【讨论】:

  • nanosleep(, ) 先生,请您告诉我,传递什么作为参数?
【解决方案2】:

两个选项:
@987654321@ 将使用微秒
@987654322@ 将使用纳秒

【讨论】:

  • 最后我实现了这个。 & 有用。 for(i=0;!stopThroughButtons && i=9) break; [NSThread detachNewThreadSelector:@selector(moveNeedle) toTarget:self withObject:nil];睡眠(200000); }
  • 见下面 cdespinosa 的回答。使用 sleep() 几乎总是错误的答案。
  • 好的。但现在我已经从我的逻辑中删除了睡眠,我使用了计时器而不是睡眠和线程。好的@bbum。你的评论让我注意到了这一点。
  • 请注意,根据平台不同,大于 1,000,000 的 usleep 可能不起作用:stackoverflow.com/questions/12175106/…
【解决方案3】:

还有 NSThread 的 +sleepForTimeInterval:,它以小数秒为单位花费时间。例如:

[NSThread sleepForTimeInterval:0.05];

应该休眠 50 毫秒。

【讨论】:

    【解决方案4】:

    正如在您启动的另一个线程中所提到的,您可能不想在主线程上休眠,因为这会阻止事件传递并冻结 UI。您可能不想循环和休眠,而是要触发计时器并在计时器触发时执行您的操作。

    【讨论】:

    • 好的。但现在我已经从我的逻辑中删除了睡眠,我使用了计时器而不是睡眠和线程。好的@bbum。你的评论让我注意到了这一点。
    • 在 UI 测试中,睡眠方法可能很有用,因为测试应用运行在与测试应用不同的进程上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多