zoukankan      html  css  js  c++  java
  • 我学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;

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

  • 相关阅读:
    MFC project for a non-Unicode character set is deprecated
    关于Visual Studio 2013 编译 multi-byte character set MFC程序出现 MSB8031 错误的解决办法
    字符串比较自实现
    各种语言里获取当前模块的方法:ABAP,ABSL,C,nodejs
    SAP CRM product attachment的document template功能
    ABAP, UI5和webpack的处理入口
    ABAP, Maven, CF App和Webpack的build
    json格式的字符串序列化和反序列化的一些高级用法
    SAP ABAP Netweaver容器化, 不可能完成的任务吗?
    UI Component in CRM WebUI and Hybris
  • 原文地址:https://www.cnblogs.com/youshan/p/2352938.html
Copyright © 2011-2022 走看看