Delphi中多线程用Synchronize实现VCL数据同步显示

2016-11-12 11:12:00来源:oschina作者:依宸老爹人点击

第七城市

概述:VCL实现同步的另一种方法就是调用线程类的Synchronize的过程,此过程需要一个无参数的procedure,故在此procedure中无法传递参数值,但可以通过类的成员来实现。在类的Execute中只须调用Synchronize就可以了。实现: 关键在于对Synchronize参数的定义。定义一个无参数的procedure通过它来访问类的成员变量szName和nIndex。在类的重载Execute中调用Synchronize。子类的定义如下: unitTChildThread;interfaceuses
Classes,Messages,Windows,SysUtils;constMAX_LEN=260;
type
TChildThreads=class(TThread)
private
{Privatedeclarations}
protected
procedureExecute;override;
//同步函数的声明
procedureUpdateData;
public
szName:array[0..MAX_LEN]ofChar;
nIndex:Integer;
end;implementation
uses
Unit1;{Important:MethodsandpropertiesofobjectsinVCLorCLXcanonlybeused
inamethodcalledusingSynchronize,forexample,Synchronize(UpdateCaption);andUpdateCaptioncouldlooklike,procedureTChildThread.UpdateCaption;
begin
Form1.Caption:='Updatedinathread';
end;}{TChildThread}
//同步函数的实现
procedureTChildThreads.UpdateData;
begin
Form1.ShowData.Items.Add(PChar(@szName));
end;procedureTChildThreads.Execute;
begin
{Placethreadcodehere}
//调用同步过程
Synchronize(UpdateData);
end;end. 主程的设计与《Delphi中多线程用消息实现VCL数据同步显示》基本一致,但为了与其显示相同结果,在生成子线程中语句顺序作了一下调整。以下代码仅显示与上一篇不同的一个过程,其它代码不再赘述。 procedureTForm1.StartThreadsClick(Sender:TObject);
var
oChildThread:array[0..1000]ofTChildThreads;
i:Integer;
begin
Fori:=0to1000do
begin
oChildThread[i]:=TChildThreads.Create(true);
//注意这里的代码与消息同步中的顺序。
oChildThread[i].nIndex:=i;
strcopy(@oChildThread[i].szName,PChar('Child'+IntToStr(i)));
oChildThread[i].Resume;
end;end;
转载地址:/2014th7cj/d/file/p/20161112/s5fiseygrsg
第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台