Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Ошибка при завершении многопоточного приложения


Автор: Susel 20.5.2006, 14:17
Есть: - класс TMyThread=class TThread, CreateSuspended=true, в методе Execute - цикл while not Terminated; 
         - главная форма, при создании которой создается n потоков

Проблема в следующем, что при закрытии главной формы вываливается Access violation......

Пробовал в конструкторе потока FreeOnTerminate:=False и в деструкторе формы вызывать Terminate и Free для каждого из потоков - та же ошибка, но если деструктор выполнять пошагово в режиме трассировки - всё ок, ошибка не происходит.

Может подскажет кто, в  чём проблема!?  

Да, ещё.....управление выполнением потока осуществляется естествено при помощи Resume/Suspend........ 

Автор: Демо 20.5.2006, 14:47
Ты бы воспроизвел ошибку на тестовом примере - тогда можно было бы говорить о чем-то.

А так простой ответ - ошибка в программе.

Добавлено @ 14:49 
А пока небольшой совет.

Для каждого работающего потока в Form.OnDestroy выполни Terminate. 

Автор: Susel 20.5.2006, 15:06
Хм.... при попытке создать тестовый пример - ошибка не выскакивает......:-)

Добавлено @ 15:07 
Делал Terminate в Form.OnDestroy - не помогает..... 

Автор: Демо 20.5.2006, 15:30
Цитата(Susel @  20.5.2006,  15:06 Найти цитируемый пост)
Хм.... при попытке создать тестовый пример - ошибка не выскакивает...


Знчит без кода ничего не сказать конкретного. 

Автор: Susel 20.5.2006, 15:36
Нашёл в чём баг.... После цикла while not Terminated в Execute стоял вызов Synhronize.... В функции синхронизации - обращение к объекту - члену TMyThread.... Страно, что объекты потока очитились до окончания выполнения процедуры Execute....  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)