@Frank
Den Thread im Suspended-Mode zu starten macht irgendwie keinen Sinn, da der doch schon durch den Event wartet.
Sicher? Wird der Thread nicht bei
Inherited Create(false)
schon gestartet? Dann ist der Event noch nicht Created!
Nein, definitiv nicht!
PS
Wenn du so eine Angst davor hast, dann leg die Erzeugung des Events einfach
vor das
inherited Create( False );
.
Delphi-Quellcode:
constructor TMyThread.Create;
begin
E_Event := TEvent.Create(NIL,false,false,'');
FRunning := false;
inherited Create( False ); // nein, nicht schlafen :)
FreeOnTerminate := false;
end;
Der Thread wird erst
nach dem kompletten Abarbeiten des
Destructors Constructors
(Danke an Uwe) gestartet (das ist absolut gesichert!). Und das auch nicht direkt sofort, sondern auch erst nach einer gewissen Dauer, weil der Thread erstmal warten muss, bis er an der Reihe ist.
Führe einfach mal dieses hier aus und wundere Dich
Delphi-Quellcode:
type
TMyThread = class( TThread )
protected
procedure Execute; override;
end;
procedure TMyThread.Execute;
begin
inherited;
end;
procedure ThreadTest;
var
LThread : TThread;
LCount : Int64;
begin
LCount := 0;
LThread := TMyThread.Create( False );
try
while not LThread.Started do
Inc( LCount );
finally
LThread.Free;
end;
Writeln( 'Gestartet nach ', LCount, ' Loops' );
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ea 0a 4c 14 0d b6 3a a4 c1 c5 b9
dc 90 9d f0 e9 de 13 da 60)