zoukankan      html  css  js  c++  java
  • delphi 多线程

    看别人的博客一万次记忆效果也没那么好,还是自己动手写写吧!

    function CreateThread(
      lpThreadAttributes: Pointer;           {安全设置}
      dwStackSize: DWORD;                    {堆栈大小:0是系统默认的大小}
      lpStartAddress: TFNThreadStartRoutine; {入口函数}
      lpParameter: Pointer;                  {函数参数无类型指针}
      dwCreationFlags: DWORD;                {启动选项:0: 线程建立后立即执行入口函数;CREATE_SUSPENDED: 线程建立后会挂起等待}
      var lpThreadId: DWORD                  {输出线程 ID }
    ): THandle; stdcall;                     {返回线程句柄}

    //API实例

    function MyFun(p: Pointer): Integer; stdcall;//加stdcall(入口函数)
    var
      i: Integer;
    begin
      for i := 0 to 500000 do
      begin
        Form1.Canvas.Lock;
        Form1.Canvas.TextOut(10, 10, IntToStr(i));
        Form1.Canvas.Unlock;
      end;
      Result := 100;//入口函数返回值
    end;//返回值作用:等线程退出后, 我们用 GetExitCodeThread 函数获取的退出码就是这个返回值!

    //如果线程没有退出, GetExitCodeThread 获取的退出码将是一个常量 STILL_ACTIVE (259); 这样我们就可以通过退出码来判断线程是否已退出.

    procedure Form1.Button1Click();

    var

      ID:Dword;//由于CreateThread中定义ID为DWord类型。

    begin

      句柄:=CreateThread(nil,0,@MyFun,nil,0,ID);

    end;

    //TTHread实例

    Type

    TMyThread =class(TThread)

    protected

      procedure  Exceute; override;

    end;

    procedure TMyThread.Exceute;//类有的抽象方法(Execute),

    begin

      FreeOnTerminate:=True;

      ...

    end;

    ...  ...

    procedure Form1.Buttom1Click;

    var

      MyThread:TMyThread;

    begin

      MyThread:TMyThread.Create(False);//False:立刻执行;True:Resume才执行。Suspend

    end;

  • 相关阅读:
    mysql性能分析工具
    vim使用大全
    Vue computed属性
    模板题 + KMP + 求最小循环节 --- HDU 3746 Cyclic Nacklace
    Greedy --- HNU 13320 Please, go first
    DFS --- HNU 13307 Galaxy collision
    HNU 13308 Help cupid
    Linux
    dp
    2015 Multi-University Training Contest 2 1006 Friends
  • 原文地址:https://www.cnblogs.com/760044827qq/p/4156584.html
Copyright © 2011-2022 走看看