我有一個多線程程序,需要一次運行許多可執行文件並等待它們的結果。如何安全地在主線程中使用[NSTask waitUntilExit]?
我在NSOperationQueue
中使用[nstask waitUntilExit]
,它在非主線程上運行(在主線程上運行NSTask
完全沒有問題)。
我的程序隨機崩潰或運行到斷言失敗和崩潰堆棧總是指向由waitUntilExit
運行runloop,執行各種回調和處理程序,包括 - 恕我直言不正確的志願和bindings updating the UI,這會導致他們在非運行-main thread(這是probably the problem described by Mike Ash)
我該如何安全地使用waitUntilExit
?
這是否是waitUntilExit
基本上不可用的問題,還是我需要在使用KVO和IB綁定來防止它們在錯誤的線程上處理時需要做一些特殊的事情(除了在主線程上顯式調度我的回調)運行waitUntilExit
?
的一個問題是:你爲什麼要使用'-waitUntilExit'?爲什麼不從主線程啓動任務,而是阻止等待它退出,添加一個'NSTaskDidTerminateNotification'的觀察器並在那裏做任何你想做的工作?您將不得不在任務持續期間保持對任務對象的強烈參考,但這很簡單。 –
@KenThomases,因爲同步'NSOperation'比異步更容易管理。通過事件和回調,我的ObjC代碼開始看起來像node.js. – Kornel