1

Appleのドキュメントに従った簡単なテストケースを作成しましたが、期待した結果が得られません。

コードは次のとおりです。

- (void)testExample2
{
    NSLog(@"1");

    dispatch_semaphore_t semaphore = dispatch_semaphore_create(0); 

    dispatch_async(dispatch_get_main_queue(), ^{
        NSLog(@"3");
             dispatch_semaphore_signal(semaphore);
        });

    NSLog(@"2");
    dispatch_semaphore_wait(semaphore, DISPATCH_TIME_FOREVER);

    NSLog(@"4");    
    dispatch_release(semaphore);    
}

1、2、3、4と読みたいと思いますが、代わりにコンソールに1、3と表示されます。

DISPATCH_TIME_NOWNSLoopハックと一緒にwhileループを使用して問題を回避することができましたが、上記のコードはある程度機能するはずです...そうですか?

乾杯...

アップデート

代わりに別のキューを使用する必要があることに気づきましたdispatch_main_queue()

4

1 に答える 1

0

私のtearDown.

while (dispatch_semaphore_wait(semaphore, DISPATCH_TIME_NOW)) {
    NSLog(@"...Tearing Down Tests..");
    [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
                             beforeDate:[NSDate dateWithTimeIntervalSinceNow:10]];
}
dispatch_release(semaphore);  

セマフォの作成を にプッシュしsetUpます。

于 2012-09-05T20:09:48.203 に答える