我学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;

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

 

posted @ 2012-02-15 17:20  Sam.山子  阅读(3333)  评论(1编辑  收藏  举报