Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему у потока вызывается Terminate? [D6, Win2k]


Страницы:   1 2

Aleksandr ©   (2002-03-15 14:03:00) 

Есть у меня поток. Существует он в одном экземпляре,
Execute у него обыкновенный:

begin
repeat
if FoundFiles then
DoChanges;
Sleep(500)
until Terminated
end;

Долго я искал, почему сей поток у меня периодически перестает работать, пока не догадался перекрыть ему OnTerminate. И оказалось, что он по непонятным причинам просто делает Terminate.
Почему это происходит и как сделать, чтобы он не Terminate до завершения работы программы?


digitman   (2002-03-15 14:40:00) [21]

Разве речь идет о вызове Terminate ?
Я ж тебе говорю - где-то в теле этих твоих методов ты "портишь" поле флага FTerminated твоего объекта Thread, причем сам того не подозревая, очевидно ... Проверяй досконально все обращения по записи к полям твоего объекта-потока


Aleksandr   (2002-03-15 14:34:00) [22]

Господа, я понимаю, ваши сомнения, но код двух методов слишком велик для его приведения, но весь он стоит в try...except. И при exceptax ведет лог таковых. И весь лог после запуска программы выглядит примерно так (без колонки даты/времени):

15.03.02 10:52:02: Состояние паузы...
15.03.02 10:52:04: Найден 1 файл...
15.03.02 10:52:05: Файл 0002.h00 обработан успешно...
15.03.02 10:52:06: Состояние паузы...
15.03.02 10:52:08: Состояние паузы...
15.03.02 10:52:10: Вызван Terminate!

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


digitman   (2002-03-15 14:17:00) [23]

что значит - "перекрыть ему OnTerminate" ? Обработчик что ли определить ? Так ведь по-умолчанию он не определен ! Как же он может изменить флаг Terminated, если, к тому же, вызывается уже после завершения метода Execute ?

Флаг Terminated ты "портишь" либо в FoundFiles() либо в DoChanges(). Проверяй досконально все, что делается в этих методах.


NailS   (2002-03-15 14:11:00) [24]

А стек посмотреть, после того как Terminate поймал?
В функциях FoundFiles и DoChanges исключительных ситуаций не происходит?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо