0
我是一位iOS程序員,他目前正在使用Cocos2d-X創建Android-iOS應用程序。POSIX對主線程的回調
我想在後臺線程中運行一個函數(解壓縮一個文件,需要2-3秒),當它準備好時我想回調主線程。在解壓縮過程中有一個小的加載器動畫,它必須運行。
這是一個非常簡單的任務與GCD:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// Unzipping here.
dispatch_async(dispatch_get_main_queue(),^{
[self callbackWithResult:result]; // Call some method and pass the result back to main thread
});
});
但在這裏我必須使用POSIX是平臺無關的。閱讀一些教程,但我能做的最好的是在完成後將後臺線程加入主線程。問題在於,pthread_join會阻止主線程,從而阻止我的加載動畫。這是我使用的教程:https://computing.llnl.gov/tutorials/pthreads/#Joining
(內置的CCHttpRequest類使用互斥體將結果從後臺線程添加到線程安全數組中,並在主線程中連續運行以檢查是否有任何內容。線程安全的數組這是一個解決辦法,但我認爲是這樣一個簡單的任務真的很醜)
不是Mac程序員,所以我不明白在你的例子中的庫調用,但它是*從*可能的一個線程調用另一個線程中的函數。線程可以進行通信,並且一個線程可以向另一個線程發送消息,要求收件人調用函數f(),但收件人必須期待該消息,接收消息並自願遵守它。 –
謝謝,我想我會使用一個通用的,線程安全的容器對象來傳遞消息。 – SPQR3
其實,我很早以前就試過Mac編程* WAY *。那時,Mac程序的main()例程通常會坐在一個循環中,等待事件,並根據需要調用函數來處理事件。當時沒有「其他線程」,但如果有的話,我可以想象另一個線程發佈「回調」事件。 –