关于线程的原理:其实并没有真正的多线程,所谓的多线程只不过是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;
以上只是在项目中应用的一个小小的线程实例,可能存在一些小剖疏忽,