Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 14.03.2015, 17:24
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
Вопрос Как использовать событие TThread.OnTerminate?

Напишите пожалуйста пример.
Ответить с цитированием
  #2  
Старый 14.03.2015, 17:39
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

Код:
procedure TForm1.FormCreate(Sender: TObject);
var
  tt: TThread;
begin
  tt.OnTerminate:=FormCreate;
end;
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Этот пользователь сказал Спасибо NumLock за это полезное сообщение:
SpectraL (14.03.2015)
  #3  
Старый 14.03.2015, 18:53
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Чего не хватает в следующем коде?
Код:
unit Unit2;

interface

uses
  {модули};

type
  TThread1 = class(TThread)
  protected
    procedure Execute; override;
    procedure DoTerminate1;
  end;

var
  Thread1: TThread1; // поток создаётся в TForm1.FormCreate

implementation

procedure TThread1.Execute;
begin
  Thread1.OnTerminate := Thread1.DoTerminate1;
  {операторы}
end;

procedure TThread1.DoTerminate1;
begin
  {операторы}
end;

end.

Последний раз редактировалось SpectraL, 14.03.2015 в 18:55.
Ответить с цитированием
  #4  
Старый 14.03.2015, 18:57
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

см. 2-е сообщение
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #5  
Старый 14.03.2015, 18:59
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Еды что ли не хватает?
Ответить с цитированием
  #6  
Старый 14.03.2015, 19:11
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Пожалуйста скажите я в отчаинии.
Ответить с цитированием
  #7  
Старый 15.03.2015, 11:08
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
Восклицание

Событие OnTerminate используется следующим образом:
Код:
unit Unit2;
 
interface
 
uses
  {модули};
 
type
  TThread1 = class(TThread)
  protected
    procedure Execute; override;
    procedure DoTerminate; override; // объявляем процедуру события OnTerminate
  end;
 
var
  Thread1: TThread1; // поток создаётся в TForm1.FormCreate
 
implementation
 
procedure TThread1.Execute;
begin
  {операторы}
end;
 
procedure TThread1.DoTerminate; // процедура события OnTerminate
begin
  {операторы}
end;
 
end.

Последний раз редактировалось SpectraL, 15.03.2015 в 11:15.
Ответить с цитированием
  #8  
Старый 15.03.2015, 11:16
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

абсолютно не правильно!!! DoTerminate является виртуальным методом и вызывается после Execute. событие OnTerminate вызывается внутри DoTerminate и выполняется в основном потоке.
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
  #9  
Старый 15.03.2015, 13:39
Аватар для SpectraL
SpectraL SpectraL вне форума
Начинающий
 
Регистрация: 19.05.2011
Адрес: Санкт-Петербург
Сообщения: 112
Версия Delphi: 10.1 Berlin
Репутация: 10
По умолчанию

Цитата:
Сообщение от NumLock
абсолютно не правильно!!! DoTerminate является виртуальным методом и вызывается после Execute. событие OnTerminate вызывается внутри DoTerminate и выполняется в основном потоке.
В Delphi XE7, процедура DoTerminate выполняется:
1. в дополнительном потоке;
2. после завершения процедуры Execute, т.к. DoTerminate изначально связана с OnTerminate, которую нет необходимости вызывать.

Последний раз редактировалось SpectraL, 15.03.2015 в 13:48.
Ответить с цитированием
  #10  
Старый 15.03.2015, 19:46
Аватар для Alex_4444
Alex_4444 Alex_4444 вне форума
Прохожий
 
Регистрация: 22.12.2014
Сообщения: 14
Версия Delphi: XE5
Репутация: 50
По умолчанию

Какого вам еще надо? Сам спросил сам ответил что ли? Вопрос правильно сформулируй. Ходют тут всякие...
Во втором сообщении тебе ответ.
РС: хочешь правильный ответ - задавай правильный вопрос.
__________________
Самые сильные программисты были на заре компьютеризации.
И чем дольше я программист, тем больше это понимаю - мы до сих пор поддерживаем их код...
Ответить с цитированием
  #11  
Старый 15.03.2015, 22:34
Аватар для Facepalm
Facepalm Facepalm вне форума
Прохожий
 
Регистрация: 03.02.2013
Сообщения: 40
Репутация: 2552
По умолчанию

Цитата:
Сообщение от Alex_4444
...Ходют тут всякие...
<CENSORED>
4250
__________________
Ну ты понел ^_^.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 09:56.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025