• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-12 10:22:42 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

正如标题所说,NSRunLoop 的 runMode:beforeDate: 不会等待。我应该怎么做才能让线程等待 NSRunLoop。

我正在后台线程上运行一个方法:

[self performSelectorInBackgroundselector(performOperation withObject:nil];


- (void)performSynchronousOperationoperation *)operation
{
    operationComplete = NO;

    // Now wait for response
    NSRunLoop *theRL = [NSRunLoop currentRunLoop];

    while (!operationComplete && [theRL runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]);

    return;
}

后台线程不会在 while 循环中等待。我有什么遗漏吗?



Best Answer-推荐答案


几个观察:

  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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap