在Mac OS X上,Cocoa是事件驅動的。我的意思是,每一件事都是由用戶界面驅動的 - 用戶點擊某物或在特定區域移動會導致一個事件處理程序被調用。主要只是調用NSApplicationMain(),直到程序退出時創建一個無限循環。可可的事件驅動系統:後臺任務在哪裏運行?
那些不是用戶驅動的任務呢?我會在哪裏放置需要在後臺工作的任務,以提供程序的基本功能?例如,Photo Booth在用戶與UI交互時(即當用戶點擊某個按鈕時更改爲攝像機)會執行某些操作。然而,Photo Booth也不斷從相機中檢索幀以提供視頻流。
所以我的問題是非UI任務代碼去哪裏? Main()並不是真正的可能性,因爲我需要在整個程序生命週期中運行任務,而不是在程序剛啓動時運行。我想在Mac OS X Snow Leopard(我希望所有的Mac系統上都能工作:即Lion OS X),並且在Xcode中使用Obj-C Cocoa應用程序。
謝謝,線程完美。我需要一個集中的地方來聲明所有變量並啓動線程。我會在哪裏做這件事? – fdh 2012-01-12 00:41:12
最後,您的任務總是要運行以迴應某些事情(即使某些事情是「時間流逝」或「應用程序啓動」)。對於像Photo Booth這樣的示例,它將響應視頻捕獲庫的回調而運行。在網絡應用程序的情況下,它將響應網絡上的傳入數據包而運行。 「事件驅動」不僅適用於GUI事件。 – 2012-01-12 01:38:14
如果我希望它被應用程序啓動「驅動」,我會把它放在主體中,就像在控制檯應用程序中一樣嗎? – fdh 2012-01-12 04:04:02