私は仕事の束をしているバックグラウンドスレッドを持っています - アプリケーションをロードしています。メインスレッドは、UIProgressViewで進行状況を表示しています。あるスレッドは、別のスレッドがクラッシュしたかどうかを判断できますか?
カップルの機会に
[self performSelectorInBackground:@selector(loadAppInBackground) withObject:self];
は、バグが発生しました(別のアプローチは、この問題は簡単に解決できる場合しかし、私はこの方法には結婚ではないよ)バックグラウンドスレッドはperformSelectorInBackgroundで生み出されていますバックグラウンドスレッドがクラッシュする(アプリケーションが進化するにつれて異なるバグ)ので、プログレスバーは停止しますが、何も間違っていることを明確に知らされません。
私はこの状況を検出したいと思っています。ユーザーが待っていなくても、単にハングするよりも、うまく機能しません。
ロードプロセスの時間が大幅に異なる可能性があるため、タイムアウトは理想的な選択肢ではありません。
フォアグラウンドスレッドがバックグラウンドスレッドが失敗したことを検出する最も良い方法は何ですか?フォアグラウンドスレッドはUIを処理するために忙しいので、最初のバックグラウンドスレッドを監視する必要がありますか?それは醜いようです。
バックグラウンドプロセスに「ping」するために使用できるスレッド間通信メカニズムがありますか?他のスレッドの状態をチェックする低レベルのシステムメカニズムはありますか?
デバッガは、実行中のすべてのスレッドについて認識しており、ステータスを把握しているようです。私は同じことをするために私のアプリに利用可能なコールがあるのだろうかと思っています。
この背景作業(GCD、NSOperations、NSThreads)はどのように派遣していますか?答えは実装によって異なります。 – CodaFi
[self performSelectorInBackground:@セレクタ(loadAppInBackground)withObject:self]; –
タイムアウトは主に使用されるテクニックです。スレッドが正常に動作しているのか、無限ループ中であるのか(異常終了しているのか)を判断することができないためです。したがって、バックグラウンドタスクが1秒(ローカルI/O、またはネットワークI/Oの場合は15〜60秒)で完了したかどうかを確認できます。申し訳ありませんが、一般的な問題を尋ねているのであいまいな提案しかできません。 – HKTonyLee