セマフォを使用するときに DISPATCH_TIME_NOW と DISPATCH_TIME_FOREVER をいつ使用するかの例を教えてください。
2つの違いは何ですか?どのような場合にどちらを使用しますか?
ドキュメントによると、 DISPATCH_TIME_NOW はすぐにタイムアウトすることを意味します。DISPATCH_TIME_FOREVER は、タイムアウトの無限を意味します。
なぜ前者が必要なのですか。つまり、すぐにタイムアウトします。
セマフォを使用するときに DISPATCH_TIME_NOW と DISPATCH_TIME_FOREVER をいつ使用するかの例を教えてください。
2つの違いは何ですか?どのような場合にどちらを使用しますか?
ドキュメントによると、 DISPATCH_TIME_NOW はすぐにタイムアウトすることを意味します。DISPATCH_TIME_FOREVER は、タイムアウトの無限を意味します。
なぜ前者が必要なのですか。つまり、すぐにタイムアウトします。
すぐにタイムアウトして、ブロックの計算が終了したかどうかを確認できます。同様に、別のブロックの実行を続行する前に、ブロックが完了するまで永遠に待つことができます。
グループが終了したかどうかを確認する例は、次のようになります。
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