Коллеги, приветствую.
Интересует вопрос, вызова асинхронных функций в Delphi.
На первом этапе создал следующий юнит
unit TD.AsyncFunc;
interface
uses
System.classes;
type
TAsyncCallProc = reference to procedure;
type
TAsyncFuncThread = class(TThread)
private
Fproc: TAsyncCallProc;
{ private declarations }
protected
procedure Execute; override;
public
constructor Create(const proc: TAsyncCallProc);
published
{ published declarations }
end;
procedure AsyncCallProc(const proc: TAsyncCallProc);
implementation
procedure AsyncCallProc(const proc: TAsyncCallProc);
var
th: TAsyncFuncThread;
begin
th:= TAsyncFuncThread.Create(proc)
end;
{ TAsyncFuncThread }
constructor TAsyncFuncThread.Create(const proc: TAsyncCallProc);
begin
Fproc := proc;
FreeOnTerminate := true;
inherited Create(false);
end;
procedure TAsyncFuncThread.Execute;
begin
Fproc;
end;
end.
Та тут и коню понятно, что этот способ не потоко-безопасный
Использовать так:
procedure TMainForm.Button3Click(Sender: TObject);
begin
AsyncCallProc(
procedure
begin
(Sender as TButton).Text := 'Начал выполнение';
Sleep(5000);
(Sender as TButton).Text := 'Закончил выполнение';
end);
end;