2011-11-08 40 views
7

我打電話到的CoInitializeEx,具體是:在我的應用程序退出之前將會終止的線程上調用CoUninitialize是否很重要?

CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED); 

在我的應用程序創建,但隨後的應用程序退出之前終止線程。將這些與CoUninitialize調用配對是重要的,還是在線程終止時釋放這些資源?

+1

即使這樣做並不重要,爲什麼你不配對? –

+0

因爲代碼已經在測試中了,而且如果更改無關緊要,我寧願不更改它,但要採取措施。 – jeffm

回答

14

資源通常在進程終止時返回給系統,而不是其中一個線程執行時。

但是,CoUninitialize()不僅釋放資源和卸載DLL,還會進入模式消息循環以便在線程終止之前抽取剩餘的COM消息。該文件說:

如果有剩餘的開放的對話,CoUninitialize開始 模式消息循環,並從 容器或服務器爲這個COM應用分派任何未決的消息。通過調度 消息,CoUninitialize確保應用程序在收到所有未決消息之前不會退出 。丟棄非COM消息 。

因此,爲了避免對呼叫者的側RPC錯誤,我建議你按照文檔的意見,並終止該呼籲CoInitializeEx()線程之前一直調用CoUninitialize()

相關問題