| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > Создание потока внутри класса |
| Автор: Smarts 5.5.2007, 17:47 | ||||
| Допустим есть некоторый класс CClass1 и в нем функция CClass1::Func1; Если попытаться передать в CreateThread функцию из класса, то выходит такая ошибка:
Ок, ставим значек адреса и получаем вот это:
Если создать функцию с точно такими же параметрами, но вне класса, то все проходит отлично... Можно ли как-нибудь это сделать не выводя функцию за пределы класса? |
| Автор: DigitSphinx 5.5.2007, 19:40 |
| я тоже сталкивался с такой проблемой , пришлось создать специальную функцию (делала тоже самое что и собственная функция класса но была отточена под функцию потока) и структуру которая содержала указатель на объект класса и некоторые дополнительные данные, затем я создавал поток и кидал туда ссылки на функцию и объект структуры , этим моя проблема была решена , надеюсь что тебе тоже поможет |
| Автор: Smarts 6.5.2007, 02:35 |
| Можешь пояснить что за специальная функция и дополнительные данные? Хотелось бы сделать все это внутри класса не передавая в CreateThread внешних функций. Кстати, если сделать ассемблерную вставку с push & call (чтобы передать запрещенные аргументы), глючить в результате не будет? По идее та же функция и тот же указатель, только компилятор почему-то ругается если она внутри класса... |
| Автор: Жуть 6.5.2007, 03:09 |
| Класс создает поток, в котором создает процесс... также смотри http://forum.sources.ru/index.php?showtopic=118174&hl=%CF%EE%F2%EE%EA |
| Автор: Greeen 6.5.2007, 12:15 |
| Smarts, метод статическим сделай. |
| Автор: En_t_end 7.5.2007, 18:14 |
| http://forum.vingrad.ru/forum/topic-107767.html |
| Автор: Smarts 7.5.2007, 19:15 |
| Earnest, я разобрался уже, несоответствие типов происходит из-за метода вызова __thiscall, так как кроме обычных параметров еще и указатель this передается. Решил проблему созданием отдельного класса со статической функцией, которая вызывает нужную мне функцию потока (виртуальную), а в своем классе перегружаю ее уже с требуемым кодом. |
| Автор: Earnest 8.5.2007, 07:41 |
| Smarts, все правильно, так и делают. |