關於線程的原理:其實並沒有真正的多線程,所謂的多線程只不過是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;
以上只是在項目中應用的一個小小的線程實例,可能存在一些小剖疏忽,
