2011-08-25 126 views
3

如何從主線程中銷燬由performSelectorInBackground:withObject:創建的線程?我需要強制終止凍結線程。如何終止performSelectorInBackground:線程?

+0

你怎麼知道它是「凍結的」,而不僅僅是非常非常非常長的時間來執行? (如果你可以成功地回答這個問題,你將解決所有時間最大的問題之一) –

回答

9

你不能從後臺殺死後臺線程ad,在後臺線程中執行的方法必須返回以結束線程。

您的實際問題似乎是您的後臺線程處於凍結狀態,您應該解決該問題,而不是嘗試解決該問題。

+0

+1「你的實際問題似乎是你的後臺線程凍結了,你應該解決這個問題,而不是試圖解決它。」 – justin

+0

那麼一旦你希望它停止,你只需要在你的背景方法中做一個回報? – Supertecnoboff

1

我不知道這是否可以幫助,但這裏有雲:

假設你打電話,從A類並假設A類performSelector通話將被從內存在B級釋放(其如果是選擇尚未執行的地方,你可能會得到一個崩潰 - 所以你在SO)發佈了這個問題:

無論你的B釋放,這樣做:

[NSObject cancelPreviousPerformRequestsWithTarget:A]; 
+0

我也從'performSelectorInBackground'線程全新的'performSelectorOnMainThread'。 – Dmitry

+1

這有助於計劃延遲執行的方法,但不適用於已在運行的方法。 – omz

0

蘋果documentation

推薦的方式退出線程讓它正常退出其入口點 程序。雖然Cocoa,POSIX和多處理服務 提供了直接消除線程的例程,但是強烈建議不要使用這樣的例程 。殺死一個線程可以防止 之後的線程自行清理。由該線程分配的內存可能會被泄漏, 線程當前正在使用的任何其他資源可能無法正確清理,從而在稍後創建潛在問題 。