我有一个似乎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
似乎没有做任何事情。我错过了一些明显的东西吗?这里有一些深线程问题吗?谢谢!