在我的应用程序退出之前终止的线程上调用CoUninitialize是否很重要?

jef*_*ffm 7 windows com visual-c++

我打电话给CoInitializeEx,具体来说:

CoInitializeEx(NULL, COINIT_DISABLE_OLE1DDE | COINIT_APARTMENTTHREADED);
Run Code Online (Sandbox Code Playgroud)

在我的应用程序创建的线程中,但随后在应用程序退出之前终止.将这些与CoUninitialize调用配对是否很重要,或者在线程终止时是否释放这些资源?

Fré*_*idi 16

当进程终止时,通常会将资源返回给系统,而不是在其中一个线程执行时.

但是,CoUninitialize()不仅释放资源并卸载DLL,它还进入模态消息循环,以便在线程终止之前抽取剩余的COM消息.文件说:

如果还有剩余的打开对话,则CoUninitialize启动模态消息循环并从容器或服务器为此COM应用程序分派任何待处理消息.通过分派消息,CoUninitialize确保应用程序在接收所有未决消息之前不会退出.非COM消息被丢弃.

因此,为了避免调用方的RPC错误,我建议您遵循文档的建议,并CoUninitialize()在终止已调用的线程之前始终调用CoInitializeEx().