分享
 
 
 

如何显示子线程的当前状态

王朝delphi·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

如何显示子线程的当前状态

刚刚完成的一个小程序是分析使用竖向排列的24针打印头打印一个数据文件,分析每根针的出针次数等一些参数,给机械开发部门做寿命分析等等。

由于数据文件可能很大,分析时间会比较长,因此要能够显示分析进度,否则让比人以为程序死掉了那不是人生一大憾事。

因此,分析工作放在子线程中进行,通过产生“状态改变事件”和“分析结束事件”来通知主线程更新状态。线程定义如下:

//==================================

// MyThread.pas

//===================================//

TStatusChangedEvent = procedure (Percent: Integer) of Object; //状态改变事件

TFinishedEvent = procedure of Object; // 分析结束事件

TMyThread = class(TThread)

Private

FOnStatusChanged: TStatusChangedEvent;

FOnFinished: TFinishedEvent;

protected

procedure Execute; override;

public

OnStatusChanged: TStatusChangedEvent read FOnStatusChanged write FOnStatusChanged;

OnFinished: TFinishedEvent read FOnFinished write FOnFinished;

end;

procedure TMyThread.Execute;

var

Percent: Integer;

begin

...

if (Percent 发生了改变) and Assigned(FOnStatusChanged) then

FOnStatusChanged (Percent);

...

// 分析结束

if Assigned (FOnFinished) then

FOnFinished; // 在分析结束时通知主线程

end;

状态显示由一个窗体实现,该窗体有一个进度条,一个状态Label,一个取消按钮,以及一个定时器。定义如下(没有给出进度条、Label、按钮的代码)

//=====================================

// TFrmStatus.pas

//=====================================//

TFrmStatus = class (TForm) // 显示进度的窗体

Timer1: TTimer;

Procedure FormCreate (Sender: TObject);

Private

Procedure SetPercent (Value: Integer);

Procedure SetTerminate (Value: Boolean);

Public

Property Percent: Integer read FPercent write SetPercent;

Property Terminate: Boolean read FTerminate write SetTerminate;

End;

Procedure TFrmStatus. FormCreate (Sender: TObject);

begin

FTerminate := false;

Timer1.enable := false;

end;

procedure TFrmStatus. SetPercent(Value: Integer); // 设置百分比进度

begin

// 设置控件状态以表示当前的百分比进度

end;

procedure TFrmStatus.SetTerminate(Value: boolean;) // 设置结束状态

begin

if FTerminate <> Value then

begin

FTerminate := Value;

Timer1.Interval := 2;

Timer1.Enable := true;

end;

end;

procedure TFrmStatus.Timer1Timer(Sender: TObject); // 响应定时器,关闭窗口,返回mrOk

begin

Close;

ModalResult := mrOk;

end;

//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

主窗体负责创建分析线程和状态显示窗体,并响应分析线程产生的“状态改变事件”和“分析结束事件”。

// 主窗体

TFrmMain := class(TForm)

private

FFrmStatus: TFrmStatus;

procedure DoStatusChange(Percent: Integer); // 响应分析进度改变事件

procedure DoFinished; // 响应分析结束事件

public

procedure Do;

end;

// 运行分析

procedure TFrmMain.Do;

var

MyThread: TMyThread;

FrmStatus: TFrmStatus;

begin

try

MyThread := TMyThread.Create(true);

MyThread.OnStatusChange := DoStatusChange;

MyThread.OnFinished := DoFinished;

try

FrmStatus := TFrmStatus.Create(nil);

FFrmStatus := FrmStatus;

MyThread.Resume; // 启动线程

if FrmStatus.ShowModal = mrOk then

ShowAnalyseResult; // 显示分析结果

finally

FFrmStatus := nil;

FrmStatus.Free;

end;

finally

MyThread.FreeOnTerminate := true;

MyThread.Terminate;

end;

end;

// 响应状态改变事件,显示进度

procedure TFrmMain.DoStatusChange(Percent: Integer)

begin

if FFrmStatus <> nil then

FFrmStatus.Percent := Percent;

end;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有