効果がないように見えるケースがありCFRunLoopWakeUp
ます。セットアップは次のとおりです。
メインスレッドにない「典型的な」whileループがあり、いくつかの作業が完了するのを待ちます。
- (void)someFunc
{
self.runLoop = CFRunLoopGetCurrent();
NSLog(@"Pre loop.");
while (!self.completed)
{
NSLog(@"In loop.");
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]];
[pool release];
}
NSLog(@"Post loop.");
}
何らかの作業が完了するまで待機するコールバック関数があります。これもメインスレッドから呼び出されません。
- (void)callback
{
NSLog(@"Work completed.");
self.completed = YES;
// I've checked that CFRunLoopIsWaiting(self.runLoop) here returns true
CFRunLoopWakeUp(self.runLoop); // Should wake up the waiting run loop, but doesn't!
}
コールバックが呼び出されますが、何らかの理由でCFRunLoopWakeUp
何もしていないようです。明らかな何かが欠けていますか?ここでいくつかの深いスレッド化の問題が発生していますか? ありがとう!