菜鸟教程小白 发表于 2022-12-12 10:22:42

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


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

<p>我正在后台线程上运行一个方法:</p>

<pre><code>;


- (void)performSynchronousOperation:(operation *)operation
{
    operationComplete = NO;

    // Now wait for response
    NSRunLoop *theRL = ;

    while (!operationComplete &amp;&amp; ]);

    return;
}
</code></pre>

<p>后台线程不会在 while 循环中等待。我有什么遗漏吗?</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>几个观察:</p>

<ol>
<li><p>为了让运行循环保持活跃,你需要添加一个源代码。例如,您可以这样做:</p>

<pre><code>[ addPort: forMode:NSDefaultRunLoopMode];
</code></pre>

<p>不幸的是,这也将阻止 <code>runMode</code> 完成,直到端口从运行循环中删除。因此,您要么必须在设置 <code>operationComplete</code> 时删除此源。或者不要使用这个 <code>runMode</code> 方法(例如,可能使用 <code>CFRunLoopRunInMode</code> Core Foundation 函数,如 <a href="https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Multithreading/RunLoopManagement/RunLoopManagement.html#//apple_ref/doc/uid/10000057i-CH16-SW1" rel="noreferrer noopener nofollow">Threading Programming Guide: Run Loops</a> 中的 list3-2 所示)。</p></li>
<li><p>我对在您的方法名称中使用“同步”感到困惑。如果你在后台线程上做一些同步的事情,那么你不需要做任何这些运行循环的东西。只有在后台线程上执行异步任务时才需要这样做,即使那样,通常也有更好的方法。 </p></li>
</ol>

<p>也许您可以通过代码示例解释您要解决的问题,我们可以提供更多帮助。</p>

<p>见 <a href="https://stackoverflow.com/a/18260025/1271826" rel="noreferrer noopener nofollow">Rob Mayoff&#39;s answer</a>了解其他见解。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - NSRunLoop 运行模式 :beforeDate: doesn&#39;t wait,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/35123220/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/35123220/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - NSRunLoop 运行模式 :beforeDate: doesn&#39;t wait