gpt4 book ai didi

objective-c - 等待来自后台线程的标志

转载 作者:行者123 更新时间:2023-12-03 16:50:38 26 4
gpt4 key购买 nike

启动程序后,我启动第二个线程来执行一些后台工作。这个线程永远不会消亡,但我需要等待它完成正在做的事情,然后才允许主线程继续。

在等待第二个线程更新其状态时,如何阻止并恢复主线程?

最佳答案

首先,不要阻塞主线程。永远不会。在 iOS 上阻塞主线程足够长的时间将导致您的应用程序被终止。在 OS X 上,它会导致死亡彩虹披萨出现。

最终,阻塞主线程会导致您的应用无响应。

相反,让应用程序抛出一个模式对话框或模式表或一些其他状态指示器,指示应用程序正在做一些在继续进行之前必须完成的事情。确保“退出”菜单项仍然处于启用状态,以防用户决定“哦,糟糕!没有时间这样做!中止!中止!中止!”。

然后,当您的后台线程完成时,使用任何一种机制来分派(dispatch)到主线程(GCD、performSelector:...等...),然后使“初始化”模式消失。

根本不需要轮询、 sleep 或 while(){}。

<小时/>

My background thread isn't done, it lives more or less forever. And I need it to reach a certain state before the main thread can do it's thing.

完全正确;因此,当它达到该状态时,您可以使用:

 [someObject performSelectorOnMainThread:@selector(sshConnectionEstablished:) withObject:nil];

其中 someObject 可能是您的应用程序委托(delegate)。

或者您可以使用通知并执行以下操作:

 dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationNamed:@"MySSHConnectionEstablished" ....];
});

请注意,您希望它是异步还是同步取决于您。

关于objective-c - 等待来自后台线程的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15537179/

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