一两件事,我做的是:如何知道需要多个线程的作业何时完成?
-(void)GrabbingProcess:(void (^)())block;
{
self.OtherGrabbingIndicator +=1;
block();
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 2 * NSEC_PER_SEC), dispatch_get_current_queue(), ^{
self.OtherGrabbingIndicator -=1;
});
}
每次我想运行的东西,可能需要很长一段时间的背景下,我像做
[Grabclass抢] GrabbingProcess:^ { //做一些抓取数据等。 }];
有许多这样的功能和许多这样的数据。例如,起初我会抓住所有的企业ID。然后,我会在单独的主题上抓住所有业务细节。
我想知道所有这些线程完成并发布适当通知的时间。
我的解决方案的问题是,一段时间后,往往self.OtherGrabbingIndicator值徘徊在2或3从不下去,即使所有的线程已经完成。
不知何故一些self.OtherGrabbingIndicator + = 1; “泄漏”并且与自身不匹配。其他抓取指示符 - = 1。我想知道这种泄漏怎么会发生?
永远不会*使用'dispatch_get_current_queue()'。这是一个调试功能,不适合在代码中使用。 –
谢谢。你能参考吗? –
请参阅联机帮助页。在“CAVEATS”下它说这个函数只用于调试/日志记录的目的。更具体地说,该函数只返回当前队列层次结构的顶端,这可能是别人的私有队列。 –