为什么以下简单的中央调度程序无法正常工作?

时间:2013-08-31 15:35:10

标签: objective-c grand-central-dispatch

所以我期待以下程序打印两行。但它不会打印任何东西。关于需要修复什么的任何想法?

#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;
}

由于

2 个答案:

答案 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时关闭其余部分 - 这就是为什么没有打印,因为您的其他调度没有机会被执行。