Допустим, функция основного потока создает объект.
Созданый объект вызывает определенную функцию которая выполняется в другом потоке, в который в свою очередь передается указатель на данный объект.
Илюстрация описанного в коде:
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, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться