如标题所示,NSRunLoop的runMode:beforeDate:不等待。我应该怎么做才能使线程与NSRunLoop等待。
我在后台线程上运行一个方法:
[self performSelectorInBackground:@selector(performOperation:) withObject:nil];
- (void)performSynchronousOperation:(operation *)operation
{
operationComplete = NO;
// Now wait for response
NSRunLoop *theRL = [NSRunLoop currentRunLoop];
while (!operationComplete && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);
return;
}
后台线程不会在while循环中等待。有什么我想念的吗?
最佳答案
一些观察:
[[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];
不幸的是,这将使
runMode
无法完成,直到将端口从运行循环中删除为止。因此,在设置operationComplete
时,您要么必须删除此源。或不要使用这种runMode
方法(例如,使用Threading Programming Guide: Run Loops list 3-2中所示的CFRunLoopRunInMode
Core Foundation函数)。 也许您可以用代码示例解释您要解决的问题,我们可以为您提供更多帮助。
有关其他见解,请参见Rob Mayoff's answer。
关于ios - NSRunLoop runMode :beforeDate: doesn't wait,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35123220/