dispatch_after时间立即触发

Ric*_*ett 1 grand-central-dispatch swift

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

我的问题是,当我发送

dispatch_after(500000000000, dispatch_get_main_queue()){
    println("triggered") //or any other code
}
Run Code Online (Sandbox Code Playgroud)

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

谢谢 :)

Stu*_*art 8

第一个参数dispatch_after(_:_:_:)不是延迟,而是一个时间点.来自文档:

when:由dispatch_time或返回的时间里程碑dispatch_walltime.

讨论 此函数一直等到指定的时间,然后异步地将块添加到指定的队列.

您需要构建相对于当前时间的延迟,使用dispatch_time(_:_:):

let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(500 * NSEC_PER_SEC))
dispatch_after(delayTime, dispatch_get_main_queue()) { ... }
Run Code Online (Sandbox Code Playgroud)