一个线程如何确定一个不同的线程是否已崩溃?

Dav*_*ens 6 iphone multithreading objective-c ios

我有一个后台线程正在做一堆工作 - 加载应用程序.主线程正在UIProgressView上显示进度.

后台线程正在使用performSelectorInBackground生成(但是,如果不同的方法使这个问题更容易解决,我不会接受这个方法)

[self performSelectorInBackground:@selector(loadAppInBackground) withObject:self];
Run Code Online (Sandbox Code Playgroud)

有时一个错误导致后台线程崩溃(应用程序发展时出现不同的错误)导致进度条停止,但用户没有明确指出任何错误.

我想要发现这种情况,并且更优雅地失败,而不是简单地挂起,直到用户放弃等待.

由于加载过程的持续时间可能差异很大,因此简单的超时不是理想的选择.

前台线程检测后台线程失败的最佳方法是什么?由于前台线程忙于处理UI,它是否需要第二个后台线程来监视第一个?这看起来很难看.

是否有一些线程到线程的通信机制可用于"ping"后台进程?更好的是,检查其他线程状态的低级系统机制?

调试器知道正在运行的所有线程......并且似乎知道它们的状态.我想知道我的应用程序是否有可以执行相同操作的电话.

Dav*_*ens 0

Objective C 中似乎没有机制可以直接检查后台线程的状态。提供的任何答案都是不错的选择......要么超时,要么让线程创建某种其持续存在的证据。

我希望能有更简单、更可靠、更实时的东西。

我将尝试捕获线程中的异常,并可能生成诸如“BackgroundThreadException”之类的通知,前台线程可以侦听并做出反应。