Re[2]: Зависание в CoUninitialize
От: Vi2 Удмуртия http://www.adem.ru
Дата: 19.04.11 11:42
Оценка: +1
Здравствуйте, Igor_Sokolov, Вы писали:

I_S>А зачем, собственно, вообще может понадобиться вызывать CoUninitialize?

I_S>просто интересуюсь — всегда игнорировал

"Typically, the COM library is initialized on a thread only once. Subsequent calls to CoInitialize or CoInitializeEx on the same thread will succeed, as long as they do not attempt to change the concurrency model, but will return S_FALSE. To close the COM library gracefully, each successful call to CoInitialize or CoInitializeEx, including those that return S_FALSE, must be balanced by a corresponding call to CoUninitialize. However, the first thread in the application that calls CoInitialize(0) or CoInitializeEx(COINIT_APARTMENTTHREADED) must be the last thread to call CoUninitialize(). If the call sequence is not in this order, then subsequent calls to CoInitialize on the STA will fail and the application will not work." (с) MSDN

"Как правило, библиотека COM инициализируется в потоке только один раз. Последующие вызовы CoInitialize или CoInitializeEx в том же потоке будут успешны, если они не будут пытаться изменить потоковую модель синхронизации СОМ, но с возвратом S_FALSE. Чтобы закрыть библиотеку COM правильно, каждый успешный вызов CoInitialize или CoInitializeEx, в том числе вернувший S_FALSE, должен быть уравновешен соответствующим вызовом CoUninitialize. Кроме того, первый поток в приложении, который вызывает CoInitialize(0) или CoInitializeEx(COINIT_APARTMENTTHREADED) должен быть последним потоком, вызвавшим CoUninitialize(). Если последовательность вызовов происходит не в таком порядке, то последующие вызовы CoInitialize на STA не будут успешны, и приложение не будет работать." (с) MSDN

Удовлетворять требованию парности любых скобок у программиста должно быть на уровне автоматизма, не дожидаясь внешних принуждений от кого бы то ни было.
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.