gpt4 book ai didi

ios - NSRunLoop 运行模式 :beforeDate: doesn't wait

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:58:16 25 4
gpt4 key购买 nike

正如标题所说,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 循环。有什么我想念的吗?

最佳答案

一些观察:

  1. 要让运行循环保持事件状态,您必须向其添加一个源。例如,您可以这样做:

    [[NSRunLoop currentRunLoop] addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode];

    不幸的是,这也将使 runMode 无法完成,直到端口从运行循环中移除。因此,您要么必须在设置 operationComplete 时删除此源。或者不要使用此 runMode 方法(例如,可能使用 CFRunLoopRunInMode Core Foundation 函数,如 Threading Programming Guide: Run Loops 中的 list 3-2 所示)。

  2. 我对您在方法名称中使用“同步”感到困惑。如果你在后台线程上做一些同步的事情,那么你不需要做任何这些运行循环的事情。只有在后台线程上执行异步任务时才需要这样做,即使那样,通常也有更好的方法。

也许您可以用您的代码示例解释您要解决的问题,我们可以提供更多帮助。

参见 Rob Mayoff's answer其他见解。

关于ios - NSRunLoop 运行模式 :beforeDate: doesn't wait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35123220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com