所以我期待以下程序打印两行。但它不会打印任何东西。关于需要修复什么的任何想法?
#import <Foundation/Foundation.h>
#import <dispatch/dispatch.h>
int main(int argc, char **argv)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
printf("Done outer async\n");
dispatch_async(dispatch_get_main_queue(),^{
printf("Done inner sync");
});
});
return 0;
}
由于
答案 0 :(得分:6)
如果你的程序没有事件循环,你必须调用dispatch_main()
:
int main(int argc, char **argv)
{
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0), ^{
printf("Done outer async\n");
dispatch_async(dispatch_get_main_queue(),^{
printf("Done inner sync");
});
});
dispatch_main();
return 0;
}
来自文档:
此函数“停放”主线程并等待块 提交到主队列。致电
UIApplicationMain
的应用 (iOS),NSApplicationMain
(Mac OS X)或主要版本的CFRunLoopRun
线程不得调用dispatch_main
。
答案 1 :(得分:2)
您的主线程首先结束,当您返回0时关闭其余部分 - 这就是为什么没有打印,因为您的其他调度没有机会被执行。