我正在尝试使用Grand Central Dispatch强制执行特定的任务订单,但我在理解正确的方法时遇到了一些麻烦。我尝试以下列方式使用组:
初始化:
startup = dispatch_group_create();
需要等待的任务:
//Don't want to wait on the main thread, so dispatch async to a concurrent queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0L),^{
//Wait until we're finished starting up
dispatch_group_wait(startup,DISPATCH_TIME_FOREVER);
//Now we can do this stuff back on the main queue
dispatch_async(dispatch_get_main_queue(),^{
//Do work
});
});
我需要等待的工作:
dispatch_group_async(startup,dispatch_get_main_queue(),^{ // work });
由于我的应用程序的性质,需要等待的任务可以在我需要等待的工作之前进行。我真正想要的是能够在条件完成,条件完成以及所有未来线程都可以完成任务的情况下等待。 GCD有这个吗?
答案 0 :(得分:2)
我不确定你实施的所有细节,如果我重复你已经知道的事情,请原谅我。
完成所有任务的调度后,请使用dispatch_group_notify。一旦分配给该组的所有任务都已完成处理,这将在您指定的队列上执行一个块。
dispatch_group_notify(startup, dispatch_get_main_queue(), ^{
// Don't forget to release the dispatch group!
dispatch_release(startup)
// perform work block;
});
对于特定的解析活动,我需要对其他解析活动正在进行时可以完成的数据进行一些处理。我将处理分配给并发队列上的组。然后,当我的解析完成后,我会检查该组是否完成。如果完成了,我会把事情搞清楚。如果没有,请使用dispatch_group_notify()并在之后执行工作。这些方面的东西:
double delayInSeconds = 2.0;
dispatch_time_t groupWaitTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
if (dispatch_group_wait(myDispatchGroup, groupWaitTime)==0){
NSLog(@"dispatch group completed in time");
dispatch_release(myDispatchGroup);
[self parsingCompleteWithActivity:activity];
}else{
NSLog(@"dispatch group did not complete in time");
dispatch_group_notify(myDispatchGroup, dispatch_get_main_queue(), ^{
dispatch_release(myDispatchGroup);
[self parsingCompleteWithActivity:activity];
});
}
祝你好运!
答案 1 :(得分:0)
如果我使用信号量然后在每次等待呼叫后发出信号,则工作。 如果我调用dispatch_group_enter和dispatch_group_leave也可以。