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;

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

  • 相关阅读:
    自定判断代码的执行环境
    将某个Qt4项目升级到Qt5遇到的问题[转]
    QT 智能提示设置
    c++基础 explicit
    Qt 5.2 Creator 和 vs2012 QT 插件的安装
    servlet乱码问题总结
    c++基础 使用智能指针
    Servlet学习之web服务器Tomcat 详解
    Windows数据类型
    友元类
  • 原文地址:https://www.cnblogs.com/youshan/p/2352938.html
Copyright © 2011-2022 走看看