Управление памятью объекта используемого в 2х потоках
От: Alexandrovich Россия  
Дата: 18.11.09 16:50
Оценка:
Допустим, функция основного потока создает объект.
Созданый объект вызывает определенную функцию которая выполняется в другом потоке, в который в свою очередь передается указатель на данный объект.

Илюстрация описанного в коде:

void SomeRequest()
{
  CRequest* req = new CRequest;
  req->DoRequest();

  // Может быть еще вызов DoRequest()
  // req->DoRequest();
  // А может нужно удалить объект? Не получится, т.к. используется в другом потоке
  // delete req; req = NULL;
}

void CRequest::DoRequest()
{
  DWORD dwThreadID;
  HANDLE hThread = ::CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)DoRequestTread, (LPVOID)this, 0, &dwThreadID);
  if(hThread)
  {
    CloseHandle(hThread);
  }
}

// Функция выполняющая запрос в отдельном потоке
UINT CRequest::DoRequestTread(LPVOID p)
{
  CRequest* r=(CRequest*)p;
  if(r)
  {
    r->DoRequestWininet();
  }
  ExitThread(0);
  return 0;
}


Как очистить память под объект CRequest, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.