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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2011, 23:13   #1
Pein95
Форумчанин
 
Регистрация: 25.04.2010
Сообщений: 881
По умолчанию выполнить действие после завершения потока

Код:
procedure TAuthForm.AuthButtonClick(Sender: TObject);

var
auth:AuthTHR;
s:string;
b:boolean;

begin
auth:= AuthTHR.Create(true);
auth.Priority:=tpnormal;
auth.Resume;

//вот ето нужно выполнить после завершения потока...Но все ето происходить в одном событии...Как определить закончилса ли поток?
b:=isauth(form1.memo1);
if b=true then
showmessage('Yes')
else showmessage('fack');



end;
Pein95 вне форума Ответить с цитированием
Старый 22.11.2011, 23:44   #2
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

в конец метода Execute запихни да и всё. А вобще у потока есть OnTerminate
Человек_Борща вне форума Ответить с цитированием
Старый 22.11.2011, 23:47   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Метод WaitFor потока, но основной поток будет ждать завершения потока. Лучше из потока перед завершением сообщение послать и в обработчике сообщения ждать завершение потока, ну и остальные действия
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.11.2011, 13:52   #4
Баламут
Баламучу слегка...
Участник клуба
 
Аватар для Баламут
 
Регистрация: 01.11.2006
Сообщений: 1,585
По умолчанию

Все просто. Метод onTerminate. Вот примерчик набросал...

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, AdoConED, StdCtrls;

type TTest = class (TThread)
private
  L: TLabel;
  j: integer;
  procedure Execute; override;
  procedure UpdateLabel;
end;

type
  TForm1 = class(TForm)
    Button1: TButton;

    Label1: TLabel;
    procedure Button1Click(Sender: TObject);  private
    { Private declarations }
  public
    procedure TestTerminated(Sender: TObject);
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TTest }

procedure TTest.UpdateLabel;
begin
  l.Caption := INtToStr(j);
end;

procedure TTest.Execute;
var
  i: integer;
begin
  for i :=  0 to 100 do
    begin
      j := i;
      Synchronize(UpdateLabel);
      Sleep(100);
    end;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  t: TTest;
begin
  t := TTest.Create(true);
  t.L := Label1;
  t.OnTerminate := TestTerminated;
  t.Start;
end;

procedure TForm1.TestTerminated(Sender: TObject);
begin
  ShowMessage('Все, хозяин!!!');
end;

end.
ЗЫ. Собрано в Д2010. А потому могут быть траблы с запуском потока в других версиях Делфи. Там вместо Start используй Resume.

Последний раз редактировалось Баламут; 23.11.2011 в 13:54.
Баламут вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ожидание завершения потока при выключении службы 3D Hunter Общие вопросы Delphi 15 27.08.2011 14:55
выполнить действие. IVANSour Общие вопросы Delphi 6 01.02.2009 22:53
Выполнить действие один раз. IVANSour Общие вопросы Delphi 6 01.02.2009 17:15
Использование метода free после завершения потока Denager Общие вопросы Delphi 4 29.08.2008 10:13