3

したがって、次のプログラムが2行を出力することを期待していました。ただし、何も印刷されません。何を修正する必要があるかについてのアイデアはありますか?

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

ありがとう

4

2 に答える 2

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

于 2013-08-31T15:45:42.690 に答える
2

メインスレッドが最初に終了し、0 を返すと残りのスレッドがシャットダウンされます。これが、他のディスパッチが実行される機会がないため、何も出力されない理由です。

于 2013-08-31T15:44:01.810 に答える