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

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

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

1 ответ

Решение

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

Другие вопросы по тегам