![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Плз, народ объясните мне, в чем фишка:
1) создаю класс производный от CWinThread 2) запускаю поток AfxBeginThread(RUNTIME_CLASS(CMyThread)), получ. указатель на объект "поток" 3) поток завершает работу (выход из функции Run()) 4) ну и что теперь с указателем (кто вызывал деструктор ? как теперь память занятую объектом освободить, не вызывая "delete" деструктор повторно ? Может, надо переделать без CWinThread (решил, блин, попробовать на свою голову -------------------- ![]() |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
как ты проток завершаешь
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
Поток я создавал и завершал так:
Если из деструктора CModuleGlobal убрать "delete m_pThread", будет утечка памяти из-за того, что память под "m_pThread->ptr" не освобождена. Если же оставить "delete m_pThread", то появляется ошибка из-за повторного удаления памяти, выделенной под "m_pThread", т.е. память под объект "CRunThread" удаляется где-то в недрах MFC сразу же по окончании функции "Run", а вот деструктор "CRunThread::~CRunThread" почему-то MFC не вызывается. Вообще-то, из-за гемора с CWinThread я уже переделал всё под обычный WinAPI поток, осталось очень неприятное впечатление об MFC -------------------- ![]() |
|||
|
||||
| Step |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
||||
|
|||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
(я хотел сказать, MFC удаляет память под объект "m_pThread", но не вызывает деструктора CRunThread::~CRunThread, поэтому память под "m_pThread->ptr" не освобождается)
Как я выяснил, просидев в отладке полчасика, MFC всё-же вызывает деструктор объекта "CRunThread", но не всегда. Бывают случаи, когда при выходе из приложения поток завершается раньше, чем MFC успевает до конца выполнить _AfxThreadEntry, а может всё дело в другом -- короче, имхо проще и безопаснее использовать обычные функции для создания потока из WinAPI. -------------------- ![]() |
|||
|
||||
| Step |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5151 Регистрация: 26.9.2002 Где: дурдом.UA Репутация: 5 Всего: 25 |
а ты не пробывал вызывать afxendthread
-------------------- - Дурак учится на своих ошибках, умный на чужих. - умные учатся у дураков |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 25 Всего: 232 |
afxendthread вызывается автоматически после выхода из Run():
Thrcore.cpp
Это сообщение отредактировал(а) mr.DUDA - 22.8.2003, 16:12 -------------------- ![]() |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |