信号量:DISPATCH_TIME_NOW vs DISPATCH_TIME_FOREVER

时间:2013-07-30 22:19:06

标签: ios grand-central-dispatch

有人可以提供一个例子,说明在使用信号量时何时使用DISPATCH_TIME_NOW与DISPATCH_TIME_FOREVER?

2之间有什么区别?在什么情况下我会使用哪一个?

根据文档,DISPATCH_TIME_NOW表示立即超时。 DISPATCH_TIME_FOREVER表示超时无限。

为什么你会想要前者,即:立即超时。

1 个答案:

答案 0 :(得分:6)

您可以立即超时以检查块是否已完成计算。类似地,您可以永远等待一个块完成,然后再继续执行另一个块。

检查组是否完成的示例可能如下所示。

if (dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_NOW) == 0) {
    // myDispatchGroup is finished... 
} else {
    // myDispatchGroup is _not_ finished...
}

检查一个组在永远等待时是否完成没有意义,因为该函数将永远等待。相反,我们使用该功能同步阻止(阻塞,如暂停或等待,而不是像GCD阻止)直到组完成。

// Enqueue myDispatchGroup

// Wait for it to finish
dispatch_group_wait(myDispatchGroup, DISPATCH_TIME_FOREVER); 

// Do other work that depends on myDispatchGroup being completed