Objective c 将FIFO调度异步队列转换为并发队列
此代码在工作时,按FIFO顺序执行两个任务:Objective c 将FIFO调度异步队列转换为并发队列,objective-c,macos,asynchronous,osx-mavericks,dispatch-async,Objective C,Macos,Asynchronous,Osx Mavericks,Dispatch Async,此代码在工作时,按FIFO顺序执行两个任务: -(void) update { @autoreleasepool { dispatch_queue_t queue = dispatch_queue_create("us.yellosoft", 0); // inpternal address dispatch_async(queue,^(){ // TODO: implement NSProgressIndi
-(void) update {
@autoreleasepool {
dispatch_queue_t queue = dispatch_queue_create("us.yellosoft", 0);
// inpternal address
dispatch_async(queue,^(){
// TODO: implement NSProgressIndicator logic
[internalIpMenuItem setTitle: @"Updating..."];
// get IP address from [[NSHost currentHost] addresses]...
NSString *localIP = [self getLocalIP];
// change UI
[internalIpMenuItem setTitle: localIP];
});
// external address
dispatch_async(queue, ^(){
// TODO: implement NSProgressIndicator logic
[externalIpMenuItem setTitle: @"Updating..."];
// get IP address from external JSON service...
NSString *externalIP = [AddressService getIPaddress];
// change UI
[externalIpMenuItem setTitle: localIP];
});
}
}
我想有两个任务同时运行。这可能吗?来自:
在iOS 5及更高版本中,您可以自己创建并发调度队列
通过将DISPATCH_QUEUE_CONCURRENT指定为队列类型。在里面
此外,还有四个预定义的全局并发队列用于
要使用的应用程序。有关如何获取全球
并发队列,请参阅“”
您“可以”,但如果仍然使用UIKit方法,则需要分派到主线程
为了并行化工作,您应该使用全局并发队列。使用您自己的并发调度队列,realy仅在您想要同步对共享资源的访问时才有意义-在这种情况下,您需要使用
dispatch\u barrier\u async
和dispatch\u barrier\u sync
如果这是一个OS X而不是iOS应用程序,您的答案会改变吗?对不起,我没有注意到OSX标签。无论如何,始终从:在OS X v10.7及更高版本或iOS 4.3及更高版本中,您还可以创建额外的并发队列以用于您自己的代码模块。这在原始代码中已经是错误的-您不能从任何后台线程调用诸如setTitle:之类的UI方法,包括顺序队列。我交换了dispatch\u get\u global\u队列(DISPATCH\u QUEUE\u PRIORITY\u DEFAULT,0)
对于DISPATCH\u QUEUE\u create(“us.yellosoft”,0)
。可根据需要工作。