如何从使用 NT 的 QueueUserWorkItem 创建的工作线程调用 COM?

How does one call into COM from worker thread created with NT's QueueUserWorkItem?

本文关键字:线程 工作 调用 COM 创建 QueueUserWorkItem NT      更新时间:2023-10-16

我有一组任务,我使用QueueUserWorkItem从属于NT线程池。我需要从这些单独的线程对COM进行一些调用,以访问WMI内的数据。然而,我不确定如何正确调用CoInitializeEx

基本上,CoInitializeEx文档说每个线程应该进行一次调用。但这些线不是我的,是nt的。我不知道它们是什么时候被创造或毁灭的,或者类似的事情。我基本上在线程例程开始时调用::CoInitializeEx()(与COINIT_MULTITHREADED),然后在线程例程结束时调用::CoUninitialize()吗?

你可以多次调用CoInitCoUninit,它们只是需要平衡。你提出的解决方案,在开始和结束你的线程过程是合理的。只要确保没有任何跳过CoUninit调用的早期退出,并且如果CoInit失败,则不要调用CoUninit