Здравствуйте, Аноним, Вы писали:
А>Всем привет.
А>Народ вот с такой гадостью столкнулся. Смысл такой:
А>А>DWORD ThreadFun(void * arguments)
А>{
А> cObject * s = (cObject *) arguments
s->>Method();
А> while(SomeCondition) {
А> ...
А> }
А> ExitThread(0);
А> return 0;
А>}
А>int main()
А>{
А> ...
А> cObject object;
А> cObject * o = & object;
А> CreateThread(..., (LPTHREAD_START_ROUTINE) ThreadFun, s, ...);
А> ...
А>}
А>
А>Но весь ужас ситуации в том, что как только отрабатывает первая строчка внутри
А>s->>Method();
А>
А>Вызывается деструктор cObject и вылетает error, что std::bad_alloc in memory ... .
А>Что тут не так и как это убить ?
выполнение функции после
А> CreateThread(..., (LPTHREAD_START_ROUTINE) ThreadFun, s, ...);
продолжается и объект object уничтожается по выходе из функции main, либо создай его ручками через new, либо копируй объект и передавай в поток копию, а еще лучше применить нормальный механизм межпоточного взаимодействия, в зависимости от контекста задачи