dispatch_semaphore_t
が待機していないかどうかを判断するにはどうすればよいですか? 私は最初に考えていました:
if ( dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW) ) {
NSLog(@"No more resources, wait");
} else {
NSLog(@"Resources available, shouldn't wait");
}
dispatch_semaphore_wait()
しかし、セマフォを実行する行為は減分されるので、私は考えていました:
if ( dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_NOW) ) {
NSLog(@"No more resources, wait");
} else {
dispatch_semaphore_signal(mySemaphore);
NSLog(@"Resources available, shouldn't wait");
}
セマフォをデクリメントしないという最終結果をもたらすのはどれですか?
編集
自分が何をしているのか、どのようにしてこの結論に至ったのかをタイプしていると、解決策について実際に間違った方法で考えていたことに気付きました。リソースを待っているかどうかを知りたかっただけで、「ユーザーへのダイアログ。これが正しい方法だと思います:
[self showWait];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
dispatch_semaphore_wait(mySemaphore, DISPATCH_TIME_FOREVER);
dispatch_async(dispatch_get_main_queue(), ^{
[self hideWait];
});
});