Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2013, 14:35   #1
Dr. MefistO
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 25
По умолчанию Terminated в потомке класса TThread

Проблема такая: создал потомок класса TThread, запустил его из своей программы. Но как дождаться его завершения?

У меня в Execute идет основной бесконечный цикл, который прерывается при определенном внутреннем условии (в файле найдена определенная сигнатура, или конец файла достигнут).

Но как основной программе узнать, что Execute завершен? Почему-то Terminated состояние из основной программы не доступно.

Вызывается поток следующим образом:
Код:
  ScanThread := TScanThread.Create(fScanName, fResName); //тут переопределен конструктор. Он вызывает inherited.
  ScanThread.FreeOnTerminate := True;
  ScanThread.Priority := tpHighest;
  ScanThread.Resume;
----

Решил проблему свойством потока OnTerminate.

Последний раз редактировалось Dr. MefistO; 13.02.2013 в 15:36.
Dr. MefistO вне форума Ответить с цитированием
Старый 13.02.2013, 15:46   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но как дождаться его завершения?
ScanThread.WaitFor;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.02.2013, 15:58   #3
Dr. MefistO
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 25
По умолчанию

Увы, нет. Т.к. программа висит до самого завершения потока. А надо как-бы апдейтить форму еще. Создавать поток, который запустит мой поток и будет его ждать?
Dr. MefistO вне форума Ответить с цитированием
Старый 13.02.2013, 16:04   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Зачем ждешь завершения?
Может достаточно будет обрабатывать его событие OnTerminate?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.02.2013, 16:10   #5
Dr. MefistO
Пользователь
 
Регистрация: 22.03.2009
Сообщений: 25
По умолчанию

OnTerminate вариант не плохой, даже нормальный. Просто в процедуре вызова потока сканирования, где и объявлена переменная потока нужно вывести сообщение о времени, затраченном на работу потока. Делать это в самом потоке мне не подходит. А делать переменную потока в protected главной формы как-то не очень.

Сделал так, как на одном форуме вычитал. В public потока добавил строчку:
Код:
property Terminated;
Ну и в коде программы сделал until Terminated. Теперь работает.
Dr. MefistO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TThread. Почему нельзя выполнить start в конструкторе класса а resume можно? Человек_Борща Общие вопросы Delphi 1 09.01.2013 19:44
C++. Как в классе-потомке несколько раз вызвать один и тот же конструктор из базового класса? fly0f Помощь студентам 6 17.04.2012 01:49
При освобождении обьекта TThread, он вешает всю программу. При этом код Execute у TThread уж выполнился.. Человек_Борща Общие вопросы Delphi 23 30.11.2011 09:18
Возврат значения из класса TThread Alter Общие вопросы Delphi 1 27.12.2010 21:48
Метод Synchronize класса TThread EdNovice Общие вопросы Delphi 10 01.08.2009 14:47