Допустим, функция основного потока создает объект.
Созданый объект вызывает определенную функцию которая выполняется в другом потоке, в который в свою очередь передается указатель на данный объект.
Илюстрация описанного в коде:
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, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться
Re: Управление памятью объекта используемого в 2х потоках
Здравствуйте, Alexandrovich, Вы писали:
A>Как очистить память под объект CRequest, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться
Счётчик ссылок прикрутить.
Делай что должно, и будь что будет
Re: Управление памятью объекта используемого в 2х потоках
От:
Аноним
Дата:
18.11.09 20:22
Оценка:
Здравствуйте, Alexandrovich, Вы писали:
A>Как очистить память под объект CRequest, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться
Можно положиться на boost::shared_ptr
Re[2]: Управление памятью объекта используемого в 2х потоках
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Alexandrovich, Вы писали:
A>>Как очистить память под объект CRequest, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться
А>Можно положиться на boost::shared_ptr
А std::auto_ptr спасет? boost прикручивать нет возможности
Re[3]: Управление памятью объекта используемого в 2х потоках
Здравствуйте, Alexandrovich, Вы писали:
A>А std::auto_ptr спасет? boost прикручивать нет возможности
auto_ptr не умеет считать ссылки.
Делай что должно, и будь что будет
Re[3]: Управление памятью объекта используемого в 2х потоках
От:
Аноним
Дата:
19.11.09 15:59
Оценка:
Здравствуйте, Alexandrovich, Вы писали:
A>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Alexandrovich, Вы писали:
A>>>Как очистить память под объект CRequest, если в функции параллельного потока это делать не допустимо, поскольку объект может еще использоваться
А>>Можно положиться на boost::shared_ptr
A>А std::auto_ptr спасет? boost прикручивать нет возможности
Нет, не подойдет.
А в чем проблема прикрутить часть буста, который с boost::shared_ptr ?
Там все нормально выдергивается так, что будут нужны только хедеры.
А иначе ты вынужден будешь писать свой велосипед,
на отладку которого ты потратишь на порядок больше времени, чем на буст.
Re[3]: Управление памятью объекта используемого в 2х потоках