其他的我也就不多说了,说也说不好,再说这个东东因为暂时没有完全搞懂所以也不好说!之就给代码吧
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.
==================线程单元结束=====================
代码很简单,只是一个计算,不过这个计算却比较费时间。多线程情况下,你可以操作按钮一来就算,同时也可以来操作按钮二来载入一幅图片,不会出现程序假死状态;但是单线程就容易假死,只有等待数据计算完毕才可以在如图片。单线程的代码我就不贴了,比较容易。