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

2016-02-19 16:23 4 1 收藏

今天图老师小编要向大家分享个如何显示子线程的当前状态教程,过程简单易学,相信聪明的你一定能轻松get!

【 tulaoshi.com - 编程语言 】

  如何显示子线程的当前状态         刚刚完成的一个小程序是分析使用竖向排列的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); // 响应定时器,关闭窗口,返回mrOkbegin  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;

来源:https://www.tulaoshi.com/n/20160219/1611926.html

延伸阅读
标签: 分娩
分娩的当天 如何饮食     孕妇在分娩当天所吃的食物,要选择消化快、能吸收高糖或者淀粉类的食物,以便可以补充体力。不可以吃油腻、蛋白质太多或难消化的食物。     1、分娩中的饮食     孕妇由于在第一产程中,需要花的时间较长,为了让孕妇保持充足的体力,饮...
iPhone显示当前未读通知内容新方式   如图,点击Badge弹出一个框,告诉你这个应用中有些什么通知是你还没有读的,这种插件爽不爽?不过别高兴太早tulaoShi.com,这应用还在开发中,尚未面世,这个插件的名字叫BadgerTweak,据开发者说: 这个插件是允许用户通过点击应用上的通知徽章来在SpringBoard上显示当前未读的通知。 ...
标签: 电脑入门
QQ不想让好友看见自己的QQ地理位置的方法如下: 若使用的是QQ2008版本的,可以通过点击QQ的菜单-设置-个人设置-状态显示,去掉显示我的地理位置前面的√即可。 若使用的是最新版本,可以先点击系统设置-基本设置-共享与资讯-我的地理位置及天气,不勾选该项即可。 注 :更多精彩教程请关注QQ技巧 栏目
标签: Web开发
代码演示效果为“2007年2月25日星期日正午12:42:48”。 使用方法:将下面的JS代码放到你想要显示的页面中(支持HTML页面),然后在你想要显示时间的位置插入下面的代码即可 div id="Clock" style="text-align:center" style="font-size: 12px; color:#000000"/div JS代码如下: script function ...
稻草人一键查询当前联网状态   很多时候我们需要查看自己电脑的网络状态,但是由于步骤比较繁琐,需要在MS-DOS模式下输入命令符(进入cmd输入ipconfig/all),所以很多初级用户都不太习惯用这种方式。其实,只要安装一个稻草人便民工具,我们就可以轻松查看网络的配置情况,这对于小白用户来说既简单又省心。下面我们一起来了解一下 ...

经验教程

780

收藏

31
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部