0

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

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

根据文档 DISPATCH_TIME_NOW 意味着立即超时。DISPATCH_TIME_FOREVER 表示超时无限。

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

4

1 回答 1

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
于 2013-07-31T08:16:49.823 回答