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

 以上只是在項目中應用的一個小小的線程實例,可能存在一些小剖疏忽,

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM