1

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);
4

2 に答える 2

0

これは一種の醜い方法ですが、うまくいくようです。

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 がブロックされることに注意してください。

于 2013-07-11T07:32:22.220 に答える
0

どうですか

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);
于 2013-07-11T07:23:07.813 に答える