たくさんの作業を行っているバックグラウンドスレッドがあります-アプリケーションをロードしています。メインスレッドは、UIProgressViewに進行状況を表示しています。
バックグラウンドスレッドはperformSelectorInBackgroundで生成されています(ただし、別のアプローチでこの問題を解決しやすくする場合は、このメソッドに縛られません)
[self performSelectorInBackground:@selector(loadAppInBackground) withObject:self];
バグが原因でバックグラウンドスレッドがクラッシュし(アプリの進化に伴ってさまざまなバグが発生)、プログレスバーが停止することがありますが、ユーザーは何かが間違っていることを明確に示すことができません。
私はこの状況を検出し、ユーザーが待つのをあきらめるまで単にぶら下がるよりも優雅に失敗したいと思います。
ロードプロセスの期間は大きく異なる可能性があるため、単にタイムアウトすることは理想的なオプションではありません。
フォアグラウンドスレッドがバックグラウンドスレッドに障害が発生したことを検出するための最良の方法は何ですか?フォアグラウンドスレッドはUIの処理でビジーなので、最初のスレッドを監視するために2番目のバックグラウンドスレッドが必要ですか?それは醜いようです。
バックグラウンドプロセスを「ping」するために使用できるスレッド間通信メカニズムはありますか?さらに良いことに、他のスレッドのステータスをチェックする低レベルのシステムメカニズムはありますか?
デバッガーは実行中のすべてのスレッドを認識しています...そしてそれらのステータスを認識しているようです。同じことをするために私のアプリで利用できる呼び出しがあるかどうか疑問に思います。