首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TThread块形成线程

TThread块形成线程
EN

Stack Overflow用户
提问于 2022-07-12 01:42:52
回答 1查看 265关注 0票数 1

这绝对是用于测试的基本代码。我也找不出为什么在单击按钮之后,新线程会阻塞GUI (主线程)。这种行为有什么原因发生吗?我很抱歉有一个愚蠢的问题,但我已经花了几个小时在这个基本的事情上,我是一个初学者与FPC。

代码语言:javascript
复制
{$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;    
EN

回答 1

Stack Overflow用户

发布于 2022-08-16 01:54:50

这里是我的线程代码:

代码语言:javascript
复制
  { TMainPortThread }
  TMainPortThread = class(TThread)
  private
    procedure Synchronous;
  protected
    procedure Execute; override;
  public
  end; 

执行过程:

代码语言:javascript
复制
procedure TMainPortThread.Execute;
var
  i:integer;
begin
  while true do begin
        // do your stuff
  end;
end; 

启动线程:

代码语言:javascript
复制
procedure TForm1.Button2Click(Sender: TObject);
begin
     TMainPortThread.Create(false);
end;  
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72946224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档