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 に答える