Bei mir gibt es eine Klasse "TThreadExecuter" .. die bekommt einfach einen MethodenPointer und ruft zyklisch wie ein Timer einen MethodenPointer der gewünschten Klasseauf. Meist 1 ms mit Sleep(1) .. aber oft ist das gar nicht notwendig.
Autsch...
Ich würde die Klasse nicht ThreadExecuter, sondern lieber "TSaugdenAkkuleer" oder "TCPUCycleKiller" nennen...
Dafür gibt es doch Waitfor oder Multisyncwait damit der Thread schläft so lange er nicht gebraucht wird.
Mavarik
PS.: Ich habe mir hierfür eine mini
Unit gemacht die so was erledigt.
Delphi-Quellcode:
unit UseMyThread;
interface
Uses System.Classes,System.SysUtils,System.SyncObjs,System.Generics.Collections;
type
TMyThread =
class(TThread)
Private
FRunning : boolean;
E_Event : TEvent;
Protected
Procedure Execute;
override;
Public
Constructor Create;
Destructor Destroy;
override;
procedure Terminate;
reintroduce;
virtual;
Procedure MyExecute;
Virtual;
Abstract;
Procedure MyFree;
Virtual;
Abstract;
Procedure Go;
end;
// ProcessorCount
implementation
{ TMyThread }
constructor TMyThread.Create;
begin
inherited Create(true);
E_Event := TEvent.Create(
NIL,false,false,'
');
FRunning := false;
FreeOnTerminate := false;
end;
destructor TMyThread.Destroy;
begin
Terminate;
inherited;
try
MyFree;
except
end;
try
E_Event.Free;
except
end;
end;
procedure TMyThread.Execute;
begin
while not(Terminated)
do
begin
try
FRunning := false;
// Atom ?
E_Event.WaitFor(INFINITE);
if Terminated
then
exit;
FRunning := true;
MyExecute;
except
end;
end;
end;
procedure TMyThread.Go;
begin
if not(Started)
then
Start;
E_Event.SetEvent;
end;
procedure TMyThread.Terminate;
begin
inherited Terminate;
E_Event.SetEvent;
end;
end.