[英]GCD: return on non-main thread
我在一些非主线程中使用dispatch_async
。 我们称之为“线程A”。 我没有使用GCD获得线程A。 执行完某些块后,我想返回线程A。我该如何做?
踩A:
dispatch_queue_t fetchQ = dispatch_queue_create("Thread B", NULL);
dispatch_async(fetchQ, ^{
// Do some stuff...
// ...
//Now I want to return in Thread A
});
dispatch_release(fetchQ);
怎么样
dispatch_queue_t fetchA = ...
//..
dispatch_queue_t fetchQ = dispatch_queue_create("Thread B", NULL);
dispatch_async(fetchQ, ^{
// Do some stuff...
// ...
dispatch_async(fetchA, ^{
// Do stuff on Tread A
});
});
dispatch_release(fetchQ);
这是种丑陋的做法,但似乎可行。
dispatch_queue_t fetchQ = dispatch_queue_create("Thread B", NULL);
__block BOOL changeWhenComplete = NO;
dispatch_async(fetchQ, ^{
for (int i =0; i < 2; i++) {
NSLog(@"doing work");
sleep(1);
}
//Now I want to return in Thread A
changeWhenComplete = YES;
});
dispatch_release(fetchQ);
while (!changeWhenComplete) {
sleep(1);
NSLog(@"waiting for fetchQ to complete");
}
NSLog(@"fetchQ returned");
return;
值得注意的是,这将阻塞线程A。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.