delphi多线程(3)

看刘艺的《面向对象的编程思想》线程部分。做示例如下:

unit untThds;

interface

uses   Classes,ExtCtrls,Graphics,untmain;

type   TDrawThread = class(TThread)  

        FCanvas:  TCanvas;   // 这个地方封装的特别好,避免了代码的冗余。  

        FL,FT,FW,FH: integer;  

      x,y,z: integer;  

    protected     procedure Drawing; virtual;    

    procedure Execute; override;  

   public     constructor Create(Box:TPaintBox);// 构造函数中可以写入变量,利用它的canvas   end;        TCircleThread = class(TDrawThread)  

public     procedure Drawing; override;//利用的面向对象的多态。   end;

  TRectangleThread = class(TDrawThread)  

 public     procedure Drawing; override;   end;  

 TOtherThread = class(TDrawThread)  

public       procedure Drawing;override;   end;

implementation

constructor TDrawThread.Create(Box: TPaintBox);

 begin    

 FL := Box.Left;    

 FT := Box.Top;    

FW := Box.Width;    

FH := Box.Height;    

 FCanvas := Box.Canvas;    

 FreeOnTerminate := True;//析构的时候直接关闭线程。    

inherited Create(False); end;

 

procedure TDrawThread.Execute;

 var   i,j: Integer; begin    

for i := 0 to 10 do begin        

 x := Round(Random(FW) + FL);        

 y := Round(Random(FH) + FT);        

 z := Round(Random(50));        

Synchronize(Drawing);// 使用Delphi线程类中实现的异步,你也可以自己来使用FCanvas的Lock,unLock         for j := 1 to 10000000 do// 主要进行延时。         

    z := Round(Sqr(x* Sqr(j)));    

end;

end;

 procedure TDrawThread.Drawing;

begin   

 FCanvas.Brush.Style := bsClear;

end; { TRectangleThread }

procedure TRectangleThread.Drawing;

begin    

inherited Drawing;    

 FCanvas.Pen.Color := clRed;   

  FCanvas.Rectangle(x,y,(x + z),(y + z)); end;

{ TCircleThread }

procedure TCircleThread.Drawing; begin     inherited Drawing;// 多么简洁的代码。     FCanvas.Pen.Color := clBlue;     FCanvas.Ellipse(x,y,(x+z),(y+z)); end;

{ TOtherThread }

procedure TOtherThread.Drawing; begin   inherited Drawing;   FCanvas.Pen.Color := clBlack;   FCanvas.Rectangle(x,y,(x+z),(y+z));

end;

end.

------------------------------------------------------------------------------------------------------------------------------------------

自己封装的一个临界区的类。

unit untCriticalSection;

interface

uses   Windows;

type   TMyCriticalSection = class(TObject) //封装使用临界区资源的类   private     FMyCS: TRTLCriticalSection;

  public     constructor Create;     destructor Destroy; override;     procedure Lock;     procedure UnLock;   end;

implementation

constructor TMyCriticalSection.Create; begin   InitializeCriticalSection(fmycs); // 初始化临界区 end;

destructor TMyCriticalSection.Destroy; begin   DeleteCriticalSection(fmycs);   //删除临界区 end;

procedure TMyCriticalSection.Lock; begin   EnterCriticalSection(fmyCS);    //进入临界区。 end;

procedure TMyCriticalSection.UnLock; begin     LeaveCriticalSection(fmycs); //离开临界区 end;

end. 在使用的时候便于直接使用。

在后面的博客中将逐步接受多线程编程方面的知识

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi是一门古老而优秀的编程语言,在多线程编程方面也有一些特殊的处理方式。多线程在开发中是必备的知识,但相对来说也是比较难的知识点。 多线程可以将一个进程划分为多个线程,每个线程轮流占用CPU运行时间和资源。在多线程中,可以通过优先级管理来使重要的程序优先操作,同时也提高了任务管理的灵活性。另外,在多CPU系统中,不同的线程可以在不同的CPU中执行,从而实现真正的多任务处理。 在Delphi中,使用TThread类来实现多线程编程。TThread类是Delphi中用于创建和管理线程的基本类,它提供了一些方法和属性来控制线程的执行流程。我们可以继承TThread类,重写Execute方法来编写自己的多线程任务逻辑。 下面是一个简单的例子来说明如何在Delphi中使用多线程: ```delphi unit MainForm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TMyThread = class(TThread) protected procedure Execute; override; end; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TMyThread.Execute; begin // 在这里编写你的多线程任务逻辑 Sleep(500); Synchronize(procedure begin Form1.Memo1.Lines.Add('Hello from thread!'); end); end; procedure TForm1.Button1Click(Sender: TObject); var MyThread: TMyThread; begin MyThread := TMyThread.Create(True); // 创建一个线程对象 MyThread.FreeOnTerminate := True; // 设置线程结束后自动释放 MyThread.Start; // 启动线程 end; end. ``` 在上面的示例中,我们创建了一个TMyThread类,继承自TThread类,并重写了Execute方法。在Execute方法中,我们可以编写我们自己的多线程任务逻辑。在Button1Click事件中,我们创建了一个TMyThread对象,并调用其Start方法来启动线程。 以上是Delphi中多线程编程的简单介绍,希望对你有帮助。如果你需要更详细的信息,请参考引用和引用中提到的书籍和文章。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值