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 && ]);
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's answer</a>了解其他见解。</p></p>
<p style="font-size: 20px;">关于ios - NSRunLoop 运行模式 :beforeDate: doesn'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]