CoInitialize, CoCreateInstance и потоки
От: Vorobiev Sergei Россия  
Дата: 08.07.04 13:59
Оценка:
Привет, Всем!

Как полностью освободить ресурсы после того как COM-объект больше не нужен? В приведенном примере память после завершения работы функции потока не освобождается. Если убрать вызов CoCreateInstance, то все нормально. COM-объект ничего не делает — заготовка сгенерированная CB6. Тестовая программа тоже на CB6.

#include <utilcls.h>
#include <atl\atlbase.h>
#include <process.h>
#include "EmptyCOMObject_TLB.h"

IEmptyCOMClass* pObject;

unsigned __stdcall ThreadFunc(void *apParam)
{
  CoInitialize(NULL);
  ::CoCreateInstance(CLSID_EmptyCOMClass, NULL, CLSCTX_INPROC_SERVER, IID_IEmptyCOMClass, (void**)&pObject);
  pObject->Release();
  CoUninitialize();
}

int main(int argc, char* argv[])
{
  for (int i = 0; i < 100; i++)
  {
    unsigned nThread;
    HANDLE hThread;
    hThread = (HANDLE)_beginthreadex(NULL, 0, ThreadFunc, NULL, 0, &nThread);
    WaitForSingleObject(hThread, INFINITE);
    CloseHandle(hThread);
  }
  return 0;
}
... << Rsdn@Home 1.1.4 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.