zoukankan      html  css  js  c++  java
  • Delphi 多线程的操作

    Delphi 操作多线程的代码, 在项目中需要在webservice中使用多线程,程序思想如下:

    1.就创建一个线程, 也就是说有两个线程,主线程和创建的线程, 主线程用于程序的别的操作,例如停止服务,和关闭程序等等。

    2.辅线程用于调用Webservice,用他的目的,还有就是方便查看memo中的日志, 如果只有一个线程,这是不可能的,只有等调用结束才可以,但是这里面又用到了Timer,结果想在主线程查看memo,很费劲。故创建一个辅线程。

    type
      TMyThread = class(TThread)
      private
        FMyThreadExecfinish: Boolean;

        FHTTPRIOLeExp: THTTPRIO;
        FHTTPRIONC: THTTPRIO;
        FHTTPRIOLeExp2: THTTPRIO;
        FHTTPRIOLeExp3: THTTPRIO;
        function ExecTimer: Boolean;
      protected
        FLogStrings: TStrings;
        procedure Execute; override;
      public
        property LogStrings: TStrings read FLogStrings write FLogStrings;
        property MyThreadExecfinish: Boolean read FMyThreadExecfinish write FMyThreadExecfinish;
        property HTTPRIOLeExp: THTTPRIO  read FHTTPRIOLeExp write FHTTPRIOLeExp;
        property HTTPRIONC: THTTPRIO  read FHTTPRIONC write FHTTPRIONC;
        property HTTPRIOLeExp2: THTTPRIO read FHTTPRIOLeExp2 write FHTTPRIOLeExp2;
        property HTTPRIOLeExp3: THTTPRIO read FHTTPRIOLeExp3 write FHTTPRIOLeExp3;
      end;

    procedure TfrmDataExchangePlatformMain.FormShow(Sender: TObject);
    begin
      MyThread := TMyThread.Create(True);  // false  则自动调用Execute,  True,  需要Resume后,在调用Execute

      MyThread.LogStrings := cxMemo_Log.Lines;
      MyThread.MyThreadExecfinish := True;
      MyThread.HTTPRIOLeExp := DMConn.HTTPRIOLeExp;
      MyThread.HTTPRIONC := DMConn.HTTPRIONC;
    end;


    procedure TfrmDataExchangePlatformMain.Timer_ServiceTimer(Sender: TObject);
    var
      ID: THandle;

    begin
      if MyThread.MyThreadExecfinish then
        MyThread.Resume;

         //CreateThread(nil, 0, @ExecTimer, nil, 0, ID); //ExecTimer;
    end;


    { TMyThread }

    procedure TMyThread.Execute;
    begin
      inherited;
      //FreeOnTerminate := True; {这可以让线程执行完毕后随即释放}  这个就不能要了,  因为你需要这个线程,在程序结束的时候把线程关闭就可以了
      if MyThreadExecfinish then
        ExecTimer;
    end;

    function  TMyThread.ExecTimer: Boolean;
    begin
      Result := False ;
      FMyThreadExecfinish := False;
      Screen.Cursor := crHourGlass;
      CoInitialize(nil);
      try
        TranspondClientBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
        Sleep(1000);
        TranspondPersonBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
        Sleep(1000);
        TranspondDeptBaseData_factory1(HTTPRIOLeExp, HTTPRIONC, LogStrings);
      finally
        Result := True;
        FMyThreadExecfinish := True;
        Screen.Cursor := crDefault;
        CoUninitialize;
      end;

    end;

  • 相关阅读:
    获取系统信息
    Spring下获取项目根路径--good
    Java 获取webapp,Root,classpath,项目等路径工具类
    并发与并行的区别
    享元模式的简单使用
    mysql 分库分表(水平切割和垂直切割)
    sql随机筛选几条记录
    创建表
    sql字段组合唯一
    Jobject 使用
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/3319188.html
Copyright © 2011-2022 走看看