2010-08-27 47 views
1

是否有任何howtos?我如何使用Cocoa/CoreText/Quartz進行多線程繪圖

背景畫線的最佳做法是什麼?

可以將[NSView drawRect]中的矩形數據存儲到隊列中並讓後臺線程獲取矩形並創建一些位圖並將數據呈現到位圖中,然後使用performSelectorOnMainThread:withObject來繪製它?或者我可以直接從背景畫出一個背景。

我從Bunny Laden買了一本書「Programming with Quartz 2D」,但還沒有讀過它,書中沒有提到多線程的提示。在正常的Apple API參考頁面中也找不到任何東西。

回答

1

是的,可以將[NSView drawRect]中的矩形數據存儲到隊列中,並讓後臺線程獲取矩形並創建一些位圖並將數據呈現到位圖中,然後使用performSelectorOnMainThread:withObject來繪製它。

只要你以線程安全的方式做到這一點。

這與繪圖沒有任何關係,所以沒有理由在「用Quartz 2D編程」(這是一本很棒的書 - 你絕對應該輪到閱讀它)中提到它。您可能需要一本關於多線程的配套書籍。

只要考慮你的問題的第一部分。你如何將隊列存儲在隊列中?將它添加到NSMutableArray?不是線程安全的。

Grand Central Dispatch會提供很多幫助(您沒有提及您希望支持的平臺)。

+0

嗯,我喜歡posix pthreads所有同步的東西。但我的問題是如果NSFont,NSColor,NSImage或石英對應物都是線程安全的 - 至少當我保證我的代碼一次只從一個線程調用一個對象時。如果可能將對象從一個線程傳遞到另一個線程,那麼它們不能使用全局變量或線程局部變量。 – Lothar 2010-08-27 10:37:29

+0

線程安全意味着您不必保證一次只能使用一個線程。如果你能保證那麼問題就解決了。一些gui類必須在主線程中使用 - 這與線程安全無關 - 這是因爲runloops,notificatons等。 NSImage可能屬於這一類。堅持石英和coretext。 – hooleyhoop 2010-08-28 07:38:07