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.
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.