| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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:36 |
| Нашёл в чём баг.... После цикла while not Terminated в Execute стоял вызов Synhronize.... В функции синхронизации - обращение к объекту - члену TMyThread.... Страно, что объекты потока очитились до окончания выполнения процедуры Execute.... |