我有一個後臺線程正在做一堆工作 - 加載應用程序。主線程在UIProgressView上顯示進度。一個線程如何確定另一個線程是否已經崩潰?
後臺線程正在與performSelectorInBackground催生了(雖然我不結婚這種方法,如果採用不同的方法,使這個問題更容易解決)
[self performSelectorInBackground:@selector(loadAppInBackground) withObject:self];
一對夫婦的場合中的錯誤造成的後臺線程崩潰(隨着應用程序的發展而出現不同的錯誤),導致進度條停止,但用戶沒有明確指出任何錯誤。
我想要檢測到這種情況,並且比簡單地掛起直到用戶放棄等待時更失敗。
由於加載過程的持續時間可能會有很大差異,因此簡單超時並不是理想的選擇。
前臺線程檢測後臺線程失敗的最佳方式是什麼?由於前臺線程忙於處理UI,是否需要第二個後臺線程來監視第一個?這看起來很難看。
是否有一些可用於「ping」後臺進程的線程間通信機制?更好的是,檢查其他線程狀態的低級系統機制?
調試器知道所有正在運行的線程......並且似乎知道它們的狀態。我想知道是否有一個電話可用於我的應用程序來做同樣的事情。
你如何派遣這個背景工作(GCD,NSOperations,NSThreads)?答案取決於你的實施。 – CodaFi
[self performSelectorInBackground:@selector(loadAppInBackground)withObject:self]; –
超時是最常用的技術。因爲無法確定線程是否正常運行或無限循環(暫停問題)。因此,您的前臺可以檢查後臺任務是否在1秒內完成(本地I/O,或網絡I/O的15〜60秒)。對不起,我只能提出一個模糊的建議,因爲你在問一個普遍的問題。 – HKTonyLee