zoukankan      html  css  js  c++  java
  • 线程1

    主窗体

    unit Unit1;
    interface
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls,LongWaitTrd;
    
    type
      TForm1 = class(TForm)
        btnSetTask: TButton;
        btnExitThd: TButton;
        btnCreateTrd: TButton;
        procedure btnSetTaskClick(Sender: TObject);
        procedure btnCreateTrdClick(Sender: TObject);
        procedure btnExitThdClick(Sender: TObject);
      private
         LongWaitThread:TLongWaitTrd;
         procedure OnThreadMessage(var Message: TMessage); message WM_USER+2000;
      public
        { Public declarations }
      end;
    var
      Form1: TForm1;
    implementation
    {$R *.dfm}
    
    procedure TForm1.btnSetTaskClick(Sender: TObject);
    begin
       if (LongWaitThread<>nil) then
       PostThreadMessage(LongWaitThread.ThreadID,WM_USER+1000,0,0);
    end;
    procedure TForm1.btnCreateTrdClick(Sender: TObject);
    begin
      LongWaitThread:=TLongWaitTrd.Create(true);
      LongWaitThread.MainWin:=Handle;
      LongWaitThread.Resume;
    end;
    procedure TForm1.OnThreadMessage(var Message: TMessage);
    begin
      if Message.Msg= WM_USER+2000 then
      begin
        Showmessage(String(message.LParam));
      end;
    end;
    procedure TForm1.btnExitThdClick(Sender: TObject);
    begin
        if (LongWaitThread<>nil) then
        begin
          if (not LongWaitThread.ExitLongWaitTrd()) then
          ShowMessage('The thread exited time out');
        end;
    end;
    end.
    View Code

    线程单元

    unit LongWaitTrd;
    interface
    uses
      Classes,Windows,Messages,SyncObjs,SysUtils;
    type
      TLongWaitTrd = class(TThread)
      private
        FMainWin:THandle;
        QuitEvent: TEvent;
        procedure  SendFeedBackToMainWin();
        procedure  DoTheHardWork();
        
      protected
        procedure Execute; override;
      public
        constructor  Create(CreateSuspended: Boolean);
        destructor   Destroy; override;
        function  ExitLongWaitTrd():Boolean;
      published
        property MainWin:THandle read FMainWin write FMainWin;
      end;
    implementation
    uses Unit1;
    constructor TLongWaitTrd.Create(CreateSuspended: Boolean);
    begin
      inherited Create(CreateSuspended);
    end;
    destructor TLongWaitTrd.Destroy;
    begin
      inherited;
    end;
    
    procedure TLongWaitTrd.DoTheHardWork();
    begin
      
    end;
    procedure TLongWaitTrd.Execute;
    var  
      Msg: TMsg;
    begin
      FreeOnTerminate:=True;
    //  while GetMessage(Msg, 0, 0, 0) do  
    //  begin
    //     if (Msg.message=WM_USER+1000) then //任务来了
    //     begin
    //        DoTheHardWork();
    //        SendFeedBackToMainWin;
    //     end;
    //     if (Msg.message=WM_QUIT) then
    //     begin
    //        QuitEvent.SetEvent;
    //        Break;
    //     end;
    //  end;
    //   while(true) do
    //   begin
    //     if  PeekMessage(Msg, 0, 0, 0, PM_REMOVE) then
    //     begin
    //        if (Msg.message=WM_QUIT) then
    //        begin
    //          QuitEvent.SetEvent;
    //          Break;
    //        end;
    //     end;
    //     DoTheHardWork();
    //   end;
    end;
    function TLongWaitTrd.ExitLongWaitTrd;
    begin
      Result:=true;
      QuitEvent:=TEvent.Create(nil,True,False,'QuitEvent');
      PostThreadMessage(ThreadID,WM_QUIT,0,0);
      if  (QuitEvent.WaitFor(3000)=wrTimeOut) then
           Result:=false;
      QuitEvent.Free ;
       
    end;
    procedure TLongWaitTrd.SendFeedBackToMainWin();
    var
      Status:String;
    begin
       if (MainWin<>0) then
       begin
         Status:='The data has been processed by thread.';
         PostMessage(MainWin,WM_USER+2000,0,Integer(Status))
       end;
       
    end;
    end.
    View Code
  • 相关阅读:
    RAID介绍,RAID5,10制作与损坏恢复
    ELK 安装过程
    centos 系统 yum安装软件报错
    linux系统磁盘分区
    python实现遍历两个文件夹,比对文件异常,生成比对报告功能
    win10新装系统,显卡风扇转动,链接正常开机,但设备管理器如果显示,无法更新驱动
    navicat premium 破解,无限试用方法
    安装vmware workstations 12 +ubuntu 遇到的一些问题
    win10 如何打开telnet,ftp等服务
    linux集群架构-keepalived高可用
  • 原文地址:https://www.cnblogs.com/key-ok/p/3359014.html
Copyright © 2011-2022 走看看