WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Убийство потока

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Убийство потока
Serus опубликован 19-01-2002 17:52 MSK   Click Here to See the Profile for Serus  
Я пишу на MS Visual C++ 6.0
Моя программа использует несколько потоков создаются они следующим образом:
m_pthrMain = AfxBeginThread(MainScanThreadProc, NULL, THREAD_PRIORITY_NORMAL);

Данный поток использует большое кол-во памяти сосредоточенной в CString.
Все CString создаются на стеке в функциях потока.

Далее из другого потока произвожу следующий вызов:
::TerminateThread(pDoc->m_pthrMain, 0);

При этом, сама программа не завершается.

Будет ли после этого освобождена память которую использовал поток?
(Важное замечание: в функциях потока не используются опреаторы типа new и функции типа malloc. Используются только различные функции CString: (CString str("aaaa"); str += 2 Mb;)...)
После завершения программы отладчик сообщяет:
Detected memory leaks!
Dumping objects ->
(много всяких строк ;-)

Если память не освобождается то как этого избежать?

Заранее спасибо!

gonzales опубликован 19-01-2002 18:10 MSK     Click Here to See the Profile for gonzales  Click Here to Email gonzales     
У меня такой же вопрос. Только я поток
завершаю AfxEndThread'ом.
migel опубликован 19-01-2002 19:42 MSK     Click Here to See the Profile for migel  Click Here to Email migel     
TerminateThread не вызывает деструкторов объектов завершаемого потока. И вообще она прежназначена только для экстренных случаев - лучше завести какой-либо синхронизирующий объект (EVENT например) и его использовать в качестве индикатора завершения потока.
Flex Ferrum опубликован 20-01-2002 00:15 MSK     Click Here to See the Profile for Flex Ferrum  Click Here to Email Flex Ferrum     
ИМХО, конечно, но при вызове TerminateThread не освободится только память выделенная в куче и затребованные системные объекты (хэндлы всяческие). Объекты, хранящиеся на стеке, будут уничтожены вместе со стеком. Правда, без вызовов их деструкторов. Так что в твоем случае, память выделенная под строки в CString освобождена не будет, хотя сами объекты уничтожаться.

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.