dispatch_after时间立即触发

时间:2015-08-11 18:11:37

标签: swift grand-central-dispatch

这是我第一次使用GCD,我承认,很抱歉,如果我是愚蠢的。我有一个dispatch_after命令,对我来说是一个方便的延迟。

我的问题是,当我发送

dispatch_after(500000000000, dispatch_get_main_queue()){
    println("triggered") //or any other code
}

立即触发闭合(例如我已经测试了这个并且立即触发了“触发”打印)。它应该需要更长的时间吗?比500秒长。

谢谢:)

1 个答案:

答案 0 :(得分:8)

dispatch_after(_:_:_:)的第一个参数不是延迟,而是一个时间点。来自the docs

  

时:dispatch_timedispatch_walltime返回的时间里程碑。

     

<强>讨论   此函数等待直到指定的时间,然后异步   将块添加到指定的队列。

您需要使用dispatch_time(_:_:)

构建相对于当前时间的延迟
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(500 * NSEC_PER_SEC))
dispatch_after(delayTime, dispatch_get_main_queue()) { ... }