unit Unit1;
interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
procedure incedit1; stdcall;
procedure incedit2; stdcall;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
Button6: TButton;
Button7: TButton;
Button2: TButton;
Button3: TButton;
Button5: TButton;
Button4: TButton;
procedure Button1Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private{ Private declarations }public{ Public declarations }end;
var
Form1: TForm1;
implementationvar
th1, th2: cardinal;
h1, h2: integer;
procedure incedit1;
var
i: integer;
begin
i := 0;
whiletruedobegin
form1.edit1.text := inttostr(i);
i := i + 1;
end;
end;
procedure incedit2;
var
i: integer;
begin
i := 0;
whiletruedobegin
form1.edit2.text := inttostr(i);
i := i + 1;
end;
end;
{$R *.DFM}procedure TForm1.Button1Click(Sender: TObject);
begin
h1 := beginthread(nil, 1024, @incedit1, nil, 0, th1);
h2 := beginthread(nil, 1024, @incedit2, nil, 0, th2);
end;
procedure TForm1.Button6Click(Sender: TObject);
begin
terminatethread(h1, 0);
end;
procedure TForm1.Button7Click(Sender: TObject);
begin
terminatethread(h2, 0);
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
resumethread(h1);
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
resumethread(h2);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
suspendthread(h1);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
suspendthread(h2);
end;
end.
Перевод:
Код, который вы предоставили, создает два потока с помощью функции beginthread, которая является частью Windows API. Функция beginthread создает новый поток и запускает его, выполняя указанную процедуру (incedit1 или incedit2).
Однако, пожалуйста, обратите внимание, что beginthread устарел в Delphi 2009 и более поздних версиях. Вместо этого вы должны использовать метод TThread.Create, чтобы создавать потоки.
Вот обновленная версия вашего кода с использованием TThread:
unitUnit1;interfaceusesWindows,Messages,SysUtils,Classes,Graphics,Controls,Forms,Dialogs,StdCtrls;typeTForm1=class(TForm)Button1:TButton;Edit1:TEdit;Edit2:TEdit;Button6:TButton;Button7:TButton;Button2:TButton;Button3:TButton;Button5:TButton;Button4:TButton;procedureButton1Click(Sender:TObject);procedureButton6Click(Sender:TObject);procedureButton7Click(Sender:TObject);procedureButton4Click(Sender:TObject);procedureButton5Click(Sender:TObject);procedureButton2Click(Sender:TObject);procedureButton3Click(Sender:TObject);private{ Private declarations }public{ Public declarations }end;varForm1:TForm1;th1,th2:TThread;implementationprocedureincedit1;beginwhilenotTerminateddobeginForm1.Edit1.Text:=IntToStr(0);Sleep(1000);// pause for 1 secondend;end;procedureincedit2;beginwhilenotTerminateddobeginForm1.Edit2.Text:=IntToStr(0);Sleep(1000);// pause for 1 secondend;end;{$R *.DFM}procedureTForm1.Button1Click(Sender:TObject);beginth1:=TThread.Create(True,@incedit1,nil);th2:=TThread.Create(True,@incedit2,nil);end;procedureTForm1.Button6Click(Sender:TObject);beginth1.Terminate;end;procedureTForm1.Button7Click(Sender:TObject);beginth2.Terminate;end;procedureTForm1.Button4Click(Sender:TObject);beginth1.Resume;end;procedureTForm1.Button5Click(Sender:TObject);beginth2.Resume;end;procedureTForm1.Button2Click(Sender:TObject);beginth1.Suspend;end;procedureTForm1.Button3Click(Sender:TObject);beginth2.Suspend;end;end.
В обновленном коде я заменил beginthread на TThread.Create, и использовал цикл while not Terminated do для того, чтобы потоки продолжали выполняться, пока они не будут остановлены. Я также удалил переменные h1 и h2, которые больше не были необходимы.
Кроме того, я добавил Sleep(1000) в процедурах incedit1 и incedit2 для паузы на 1 секунду между обновлениями контролов редактирования. Вы можете изменить это значение, чтобы оно соответствовало вашим потребностям.
Наконец, я заменил функции ResumeThread, SuspendThread и TerminateThread на соответствующие методы класса TThread (th1.Resume, th2.Resume, th1.Terminate и т.д.).
В статье описывается способ создания потоков в Delphi без использования класса TThread, а также демонстрируются примеры работы с такими потоками, включая их запуск, остановку и продолжение выполнения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.