_beginthreadex и деструкторы
От: VNG Беларусь https://organicmaps.app/
Дата: 05.10.04 10:45
Оценка:
Допустим есть код:

    unsigned int _stdcall ThreadLoading(void* p)
    {
        CSomeClass someObject;

        _endthreadex(0);
        return 0;
    }
    
    int main()
    {
        unsigned int nID;
        HANDLE hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, &ThreadLoading, NULL, 0, &nID));
        
        ::WaitForSingleObject(hThread, INFINITE);
        ::CloseHandle(hThread);
    }


Так вот какая проблема. Когда срабатывает _endthreadex(0), функция ожидания ::WaitForSingleObject(hThread, INFINITE) возвращается и соответсвенно следующей вызывается ::CloseHandle(hThread). В итоге имеем — деструктор объекта someObject не вызывается.

Что я делаю не так

Работаю с MSVC++7.1 и CRT, которая идет с ним же.

2Moderator. Просьба не отсылать в WinAPI или средства разработки.
... << RSDN@Home 1.1.3 beta 1 >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.