我有它創建10個線程+它創建的任務列表中的一個窗口服務。約線程,COM +和STA公寓幾個問題
每個11個線程通過調用CoInitialize(零)進入STA。由一個線程創建
- 任務列表中,其他獲得該項目,工藝,並免費....
一)能否其他線程使用由其他線程創建的對象? (那似乎是工作,但..) 二)其他線程釋放由其他線程分配的內存? (那似乎不行...)
我應該以某種方式編組線程之間的指針? 或者我應該至少得到該項目,處理它,但讓它被釋放是創建它的線程的「所有者」?
- 在我的Windows服務中,我創建了可用於啓動/停止服務(掛起和恢復線程)的功能。
但是,我有一個實際收集數據的線程的問題,並在間隔中執行它。 當線程加載要處理的項目時,之後它進入睡眠狀態5分鐘。 我怎樣才能安全地終止這樣的線程?如何中止睡眠狀態?
在此先感謝您的幫助!
從應用實例我讀: 「如果你創建一個STA線程COM對象,您不能接口指針傳遞給另一個STA線程和調出上指針如果你嘗試,你會得到一個錯誤HRESULT 0x8001010E或RPC_E_WRONG_THREAD(應用程序調用這是編組爲一個不同的線程的界面)「。 豈不是隻有COM對象必須編組? 從TObject派生的類的常見實例怎麼樣? – Paul 2011-03-13 12:31:24
這取決於您使用的內容以及如何創建它。與COM相關的一切都必須遵守COM規則。什麼不是在COM控制下沒有。所以,如果你有一個普通的德爾福類實例,你可以通過它和不同的線程使用它,並用「經典」併發技術來保護對它們的訪問。如果你要使用COM對象(也可能是你使用的是,如果你調用CoInitialize),你必須正確地管理它們的接口通過他們線程之間。無論如何,請注意內部包裝COM對象的Delphi類(即與MSXML一起使用時的TXMLDocument) – 2011-03-13 13:12:51