在線程完成任何工作之前,每個線程初始化COM一次COM編碼是否正確,然後根據需要使用盡可能多的COM調用?爲多個COM操作初始化COM
舉例來說,在我的工作線程我成立卷影複製服務,還可以使用IFileOperation,在我的GUI線程使用我的CoCreateInstance(CLSID_ShellLink...)
桌面上創建快捷方式,並使用CoCreateInstance(CLSID_TaskScheduler...)
創建任務計劃程序作業。然後,對於所有這些操作,我只需在啓動程序和線程時每個線程調用HRESULT hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
一次。最後還有CoUninitialize。
它不是。你做出承諾*,交叉你的心,希望死亡。提供COM運行時自身無法弄清楚的細節。你保證你會抽出一個消息循環並且不會阻塞線程。你違背了兩個承諾。也許你會擺脫它,取決於。你知道你沒有當你的程序死鎖或事件沒有得到提升。你永遠無法100%確定它是安全的,你不知道其他代碼在另一臺依賴於你遵守諾言的機器上注入了什麼。不可能調試,不僅僅是因爲你不會接近機器。 –
你可以使用更簡單的條款嗎?我有點迷路..作爲一個COM初學者......你是指在消息循環方面使用COINIT_APARTMENTTHREADED?什麼是做事的最佳方式? –
是的。獲取消息循環並非難事,你總是從WPF或Winforms項目模板中獲得一個。如果你不想要,你不必創建一個窗口。 –