这绝对是用于测试的基本代码。我也找不出为什么在单击按钮之后,新线程会阻塞GUI (主线程)。这种行为有什么原因发生吗?我很抱歉有一个愚蠢的问题,但我已经花了几个小时在这个基本的事情上,我是一个初学者与FPC。
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1 : Tmemo;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
end;
type
TMemoThr = class(TThread)
procedure Execute; override;
Constructor Create(CreateSuspended : boolean);
end;
var
Form1: TForm1;
M :TMemoThr;
implementation
{$R *.lfm}
constructor TMemoThr.Create(CreateSuspended : boolean);
begin
inherited Create(CreateSuspended);
FreeOnTerminate := True;
end;
procedure TMemoThr.Execute();
begin
while (not Terminated) do begin
self.sleep(5000); // this should only put thread to sleep, not entire Form
showMessage('Inside');
end;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
M := TMemoThr.Create(false);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
M.Execute;
end; 发布于 2022-08-16 01:54:50
这里是我的线程代码:
{ TMainPortThread }
TMainPortThread = class(TThread)
private
procedure Synchronous;
protected
procedure Execute; override;
public
end; 执行过程:
procedure TMainPortThread.Execute;
var
i:integer;
begin
while true do begin
// do your stuff
end;
end; 启动线程:
procedure TForm1.Button2Click(Sender: TObject);
begin
TMainPortThread.Create(false);
end; https://stackoverflow.com/questions/72946224
复制相似问题