Delphi samples‎ > ‎

TThread Start/Resume

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ComCtrls, StdCtrls, ExtCtrls;

type
  TFMAIN = class(TForm)
    _eLogMemo: TMemo;
    StatusBar1: TStatusBar;
    Bevel1: TBevel;
    Label1: TLabel;
    Label2: TLabel;
    Bevel2: TBevel;
    Label3: TLabel;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Déclarations privées }
  public
    { Déclarations publiques }
  end;

var
  FMAIN: TFMAIN;

implementation

{$R *.DFM}

uses ccFuncs,ccthread;
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
procedure TFMAIN.Button1Click(Sender: TObject);
var
i:integer;
begin

 for i:=0 to 3 do
 begin

   with TExoProccess._Create('Inst_'+inttostr(i)) do
   //begin
   resume;
   //end;

 end;




end;

end.


unit uframe;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls;

type
  TeFRAME = class(TFrame)
    cap: TLabel;
    b1: TButton;
    b2: TButton;
    b3: TButton;
    procedure b1Click(Sender: TObject);
    procedure b2Click(Sender: TObject);
    procedure b3Click(Sender: TObject);
  private
    { Déclarations privées }
  public
   eTHREAD : TThread;
  end;

implementation

{$R *.DFM}


procedure TeFRAME.b1Click(Sender: TObject);
begin
eTHREAD.Suspend;
end;

procedure TeFRAME.b2Click(Sender: TObject);
begin
eTHREAD.Resume;
end;

procedure TeFRAME.b3Click(Sender: TObject);
begin

eTHREAD.Terminate;
eTHREAD:=nil;
end;

end.

unit ccFuncs;

interface




Type


    TLogger = class
    public
    class procedure _doLog(s:string);
    end;

implementation

uses unit1;

//------------------------------------------------------------------------------
class procedure TLogger._doLog(s:string);
begin
FMAIN._eLogMemo.Lines.Add(s);
end;




end.



unit ccthread;

interface

uses
  Classes,forms,sysutils,uframe;

type

  TExoProccess = class(TThread)

  private
    IDD : string;
    FFF:TeFRAME;
    str : string;
    procedure isOnTreminated(Sender: TObject);
    procedure shawa;
  protected
    procedure Execute; override;

  public
    constructor _Create(sdd:string);
    destructor destroy; override;
  end;

var

cnt:integer=0;

implementation

uses unit1,ccFuncs;


//------------------------------------------------------------------------------
//------------------------------------------------------------------------------


constructor TExoProccess._Create(sdd:string);
begin

  inherited Create(true);

  FreeOnTerminate:=true;
  OnTerminate:=isOnTreminated;
  IDD := sdd;



  FFF:=TeFRAME.Create(nil);
  FFF.Parent:=FMAIN;
  FFF.Name:='FF_'+IDD;

  FFF.eTHREAD:=TThread(Self);

  FFF.Top:=48;
  FFF.Height:=130;
  FFF.Width:=130;
  FFF.Left:=8+(cnt*130)+(cnt*10);

  FFF.cap.Caption:=IDD;

  inc(cnt);
end;


destructor TExoProccess.destroy;
begin

dec(cnt);



TLogger._doLog('- '+IDD+' : destroy!');



inherited destroy;

end;


//------------------------------------------------------------------------------

procedure TExoProccess.isOnTreminated(Sender: TObject);
begin
TLogger._doLog('- '+IDD+' : TERMINATED!');
//FreeAndNil(FFF);
FFF.Free;

end;


//------------------------------------------------------------------------------

procedure TExoProccess.shawa;
begin
FFF.cap.Caption:=str;
Application.ProcessMessages;
end;


//------------------------------------------------------------------------------
procedure TExoProccess.Execute;
var
i:integer;
begin

i:=0;


   while not Terminated do
   begin
   str:=inttostr(i);
   inc(i);
   Synchronize(shawa);

   if i>=3000 then break;
   end;


end;

end.







Č
ċ
ď
Info Webmaster,
Oct 9, 2012 11:21 PM
../delphi71code/home/start-resume-terminate..