SHANDLE
Advanced Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Компилятор правильно ругается, потому что пишите маразм. Вариант 1 void Func1() { myclass mc; mc.CreateThreadMethod(); } В этом случае экземпляр myclass (переменные-члены) находится в стеке первого потока. Что будет делать второй поток с данными стека первого потока? Если просто читать, то ничего, кроме мусора, он оттуда не вытянет. А если решиться что то записать, то испоганит стек первого потока, и первый поток благополучно сдохнет. Вариант 2 void Func2() { myclass *pmc = new myclass; pmc->CreateThreadMethod(); } Теперь экземпляр класса не в стеке. Но нужно будет не забыть удалить его. Тогда проще написать так (без идиотской идеи запускать метод класса отдельным потоком): DWORD WINAPI MyclassThunk(LPVOID lpObj) { myclass *pmc = (myclass*)lpObj; pmc->PublicMethod_1(); pmc->PublicMethod_2(); // ..... pmc->PublicMethod_N(); delete pmc; return 0; } void Func3() { myclass *pmc = new myclass; if (pmc) { HANDLE hThread = CreateThread(0,0,MyclassThunk, pmc, CREATE_SUSPENDED, 0); if (!hThread) { delete pmc; } else { ResumeThread(hThread); CloseHandle(hThread); } } } | Всего записей: 928 | Зарегистр. 19-01-2007 | Отправлено: 04:52 09-12-2007 | Исправлено: SHANDLE, 04:56 09-12-2007 |
|