Как один вызов в COM из рабочего потока, созданного с помощью QueueUserWorkItem NT? - PullRequest
1 голос
/ 18 октября 2011

У меня есть набор задач, которые я подчинил пулу потоков NT, используя QueueUserWorkItem.Мне нужно сделать несколько вызовов COM из этих отдельных потоков, чтобы получить доступ к данным внутри WMI.Однако я не уверен, как нужно делать правильные вызовы CoInitializeEx.

В принципе, документы CoInitializeEx говорят, что вызов должен выполняться один раз для потока.Но мне не принадлежат эти темы - NT имеет.Я не знаю, когда они будут созданы или уничтожены, или что-нибудь в этом роде.Должен ли я в основном вызывать ::CoInitializeEx()COINIT_MULTITHREADED) в начале подпрограммы потока, а затем ::CoUninitialize() в конце подпрограммы потока?

1 Ответ

1 голос
/ 18 октября 2011

Вы можете вызывать CoInit и CoUninit несколько раз, они просто должны быть сбалансированы. Предложенное вами решение сделать это в начале и в конце вашей цепочки обсуждений является разумным. Просто убедитесь, что у вас нет ранних выходов, которые пропускают вызов CoUninit, и не вызывайте CoUninit, если CoInit не удается.

...