Как сделать один вызов в COM из рабочего потока, созданного с помощью QueueUserWorkItem в NT?
У меня есть набор задач, которые я использовал в пуле потоков NT, используя QueueUserWorkItem
, Мне нужно сделать несколько вызовов COM из этих отдельных потоков, чтобы получить доступ к данным внутри WMI. Однако я не уверен, как правильно CoInitializeEx
нужно сделать.
В основном, CoInitializeEx
Документы говорят, что вызов должен быть сделан один раз для потока. Но мне не принадлежат эти темы - NT имеет. Я не знаю, когда они будут созданы или уничтожены, или что-нибудь в этом роде. Я в основном звоню ::CoInitializeEx()
(с COINIT_MULTITHREADED
) в начале процедуры потока, а затем ::CoUninitialize()
в конце моей темы рутины?
1 ответ
Ты можешь позвонить CoInit
а также CoUninit
Несколько вложенных раз, они просто должны быть сбалансированы. Предложенное вами решение сделать это в начале и в конце вашего потока proc является разумным. Просто убедитесь, что у вас нет ранних выходов, которые пропускают CoUninit
звони, а не звони CoUninit
если CoInit
выходит из строя.