我学Delphi心得与笔记-------多线程实例

关于线程的原理:其实并没有真正的多线程,所谓的多线程只不过是CPU的执行效率高,将任务分成多个点,基本能达到同时执行的效果.

关于Delphi下的多线程的应用需要说明的是:同时开启的线程数以及线程执行的方法都会影响cpu的执行效率,一般的情况下,能不用线程就不要用;下面写一个Delphi的多线和应用的例子:

----------------------------多线程的申明

type

  TmapQueryThread=class;

  TmapQueryThread=class(TThread)

  private

    vehicleId:string;

    Lon:integer;

    Lat:integer;

    AreaName:string;

 public

    constructor Create(vid:string;slon,slat:integer);

 protected

    procedure Execute;override

    procedure GetAreaName;

    procedure BeginView;

end;

-----------------------------------多线程的实现

constructor TmapQueryThread.Create(vid:string;slon,slat:integer);

begin

  inherited Create(False);

  vehicleId := vid;

  Lon:= slon;

  Lat:=slat;

  AreaName := '';

end;

procedure TmapQueryThread.Execute;

begin

  inherited;

  GetAreaName;

  if not Terminated then

  begin

    Synchronize(BeginView);

  end;

end;

//根据经纬度获取网络51地图的地址

procedure TmapQueryThread. GetAreaName;

var

Url:string;

node:IxmlNode;

xmldocm:TxmlDocument;

begin

CoInitializeEx(nil, COINIT_APARTMENTTHREADED);

Url := 'http://rgc.vip.51ditu.com/rgc?pos='+ FloatToStr(slon)+','+FloatToStr(slat)+'&type=1';

try

xmldocm := TXMLDocument.Create(Application);

xmldocm.LoadFromFile(Url);

node := xmldocm.DocumentElement.ChildNodes[1].ChildNodes[0];

AreaName := SubStr(node.Text);

except

AreaName := '网络地址获取错误,请重试';

end;

xmldocm.Free;

CoUninitialize;  

end;

//对结果进行操作

procedure TmapQueryThread.BeginView;

begin

  showmessage(AreaName);//areaName为查询的返回结果,可以自行操作

end;

------------------线各线束,在程序中实现应用该线程

procedure TFrom1.Btn1_Cliek(Sender: TObject);

begin

  TmapQueryThread

  mapQueryThread:=TmapQueryThread.Create('123456',158746111,1200000);//线程实例化

end;

以上只是在项目中应用的一个小小的线程实例,可能存在一些小剖疏忽,