您的位置:首页 > 编程语言 > Delphi

Delphi之多线程实例

2016-06-29 09:41 435 查看
其他的我也就不多说了,说也说不好,再说这个东东因为暂时没有完全搞懂所以也不好说!之就给代码吧

program TestThread;

uses

  Forms,

  Main in 'Main.pas' {Form1},

  TstThrd in 'TstThrd.pas';

{$R *.res}

begin

  Application.Initialize;

  Application.CreateForm(TForm1, Form1);

  Application.Run;

end.

===============工程文件结束===============

unit Main;

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, ExtCtrls, StdCtrls, Mask, TstThrd;

type

  TForm1 = class(TForm)

    Button1: TButton;

    Button2: TButton;

    Image1: TImage;

    Edit1: TEdit;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

var

  newThread: TTstthread;

begin

  newThread := TTstThread.Create(False);

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

  Image1.Picture.LoadFromFile(ExtractFilePath(Application.ExeName) + '0.bmp');

end;

end.

===================Main.Pas结束================

unit TstThrd;

interface

uses

  Classes;

type

  TTstThread = class(TThread)

  private

    { Private declarations }

    Answer: integer;

  protected

    procedure GiveAnswer;

    procedure Execute; override;

  end;

implementation

uses SysUtils, Main;

{ Important: Methods and properties of objects in visual components can only be

  used in a method called using Synchronize, for example,

      Synchronize(UpdateCaption);

  and UpdateCaption could look like,

    procedure TTstThread.UpdateCaption;

    begin

      Form1.Caption := 'Updated in a thread';

    end; }

{ TTstThread }

procedure TTstThread.GiveAnswer;

begin

  Form1.Edit1.Text := IntToStr(Answer);

end;

procedure TTstThread.Execute;

var

  i: integer;

begin

  { Place thread code here }

  FreeOnTerminate := true;

  for i := 0 to 2000000 do

  begin

    if Terminated then break;

    inc(Answer, Round(Abs(Sin(Sqrt(i)))));

    Synchronize(GiveAnswer);

  end;

end;

end.

==================线程单元结束=====================

      代码很简单,只是一个计算,不过这个计算却比较费时间。多线程情况下,你可以操作按钮一来就算,同时也可以来操作按钮二来载入一幅图片,不会出现程序假死状态;但是单线程就容易假死,只有等待数据计算完毕才可以在如图片。单线程的代码我就不贴了,比较容易。

      最近读书学习,一边看书一边做一些例程,在此记录下来,以供自己以后查阅,我想各位大虾可以略过了。如果您不惜赐教,鄙人将万分感激!谢谢。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: