2010-02-07 110 views
3

我正在使用線程製作iPhone應用程序。 我曾使用C#一段時間,有一種方法Thread.Join()阻止特定線程的當前線程完成執行。 Cocoa中的等價物是什麼?或替代品?Cocoa中的等效C#'Thread.Join()'是什麼?

---編輯---

PS。我正在使用NSThread。

---編輯---

我發現喜歡哪些塊調用程序線程,直到線程完成執行「waitForThreadExit」的方法。

回答

1

NSThread不以任何名稱公開聯接方法。 NSThread是一個非常簡單,高層次的包裝類。這對於在GUI應用程序中執行線程非常有用,因爲它簡化了回調到主線程。對於任務的簡單後臺處理以及在完成時將結果反饋給主線程,這應該足夠了,並且相當容易。如果你想做更多的「高級」事情(包括加入,這裏),那麼你要麼必須去pthreads或在NSThread(可能通過使用NSCondition)頂層語義。

+0

感謝您的信息。 NSCondition可能會幫助我很多! – Eonil 2010-02-07 14:48:20

+1

NP,我認爲NSThreadWillExitNotification也可能有用,正如Laurent所建議的。祝你好運 – philsquared 2010-02-07 17:07:52

1

如果您使用pthreads,則使用:pthread_join

另一方面,如果您使用的是NSThread類,那麼您所指的方法沒有等同於加入的方法。

你可以嘗試NSObject的室內用的信息performSelectorOnMainThread:withObject:waitUntilDone:

但我不完全相信你正試圖在這裏完成的。

Here's是Apple的多線程編程指南。

+0

對不起,我正在使用NSThread。有沒有辦法在NSThread上使用該方法? – Eonil 2010-02-07 12:18:47

+0

我沒有完全理解你的問題,但你有沒有看過NSThread文檔? http://developer.apple.com/mac/library/documentation/cocoa/reference/Foundation/Classes/NSThread_Class/Reference/Reference.html – 2010-02-07 12:20:13

+0

是的,但我找不到像'waitForThreadExit'這樣的方法。我會更清楚地更新我的問題。 – Eonil 2010-02-07 12:23:01

4

用Cocoa創建的線程不能創建爲分離。出於資源管理的原因,NSThread實例總是包裝附加的POSIX線程。由於報價在Thread Programming Guide

如果你想創建可連接 線程,這樣做的唯一方法是使用 POSIX線程。 POSIX默認創建 線程爲可連接。若要將 標記爲脫離或可連接的線程, 在創建線程之前使用 pthread_attr_setdetachstate函數 修改線程屬性。在線程開始後,您可以通過調用pthread_detach 函數將可連接線程更改爲分離線程 。有關 這些POSIX線程函數的更多信息,請參見 pthread手冊頁。有關 如何加入線程的信息,請參閱 pthread_join手冊頁。

如果您正在尋找一種通知NSThread結束的方法,您可以使用NSThreadWillExitNotification通知。

+0

感謝您的回答。您的信息有用!我很抱歉無法將此設置爲已接受的答案。如果我可以接受多個答案,我也應該接受。 – Eonil 2010-02-07 14:49:51

0

你可以使用NSConditionLock自己做到這一點。定義兩個條件:「運行」和「終止」。工作線程獲取鎖「正在運行」,並在終止時以條件「終止」解鎖。然後,加入將會獲得鎖「已終止」,然後解鎖「已終止」。

+0

幾乎有用...異常NSThread註冊tsd destrcutor釋放/釋放(同時,當你期望胎面壽命結束...可以導致你的應用程序崩潰),這是一個可怕的設計(或超越)沒有加入。 – bestsss 2012-06-16 08:52:47

相關問題