Ich erzeuge den Thread in einer seperaten Klasse für eine serielle Kommunikation, der Aufruf innerhalb dieser Klasse sieht aus wie folgt:
Delphi-Quellcode:
self.Thread := TComThread.Create( TRUE, TimeOut, MaxTry,
Handle, DebugMode );
self.Thread.Resume();
Übergeben werden TIMEOUT (Sekunden), MAXTRY (eine maximale Anzahl von Threaddurchläufen, wenn man so will),
HANDLE (der
Handle des Hauptfensters (evtl. mit Logging) - dieses sorgt auch dafür, dass der Thread sich beendet) und DEBUGMODE (erweitertes Piepen).
Funktion (WNDPROC) des Hauptfensters:
procedure WndProc( var Msg: TMessage ); override;
Delphi-Quellcode:
procedure TFSerial.WndProc(
var msg: TMessage );
begin
inherited;
case msg.Msg
of
MTM_TIMEOUT:
begin
if (
com.DebugMode )
then
AddLog( '
ERR -- COMMUNICATION TIMEOUT.', log_info, log );
com.Stop := TRUE;
AddSerialLog( '
ERR -- COMMUNICATION TIMEOUT.' );
ShowWarning( _( '
Es konnte keine Verbindung hergestellt ' +
'
werden! (TIMEOUT)' ) );
end;
MTM_ABORTED:
begin
if (
com.DebugMode )
then
AddLog( '
MSG -- THREAD TERMINATED.', log_info, log );
com.Stop := TRUE;
AddSerialLog( '
MSG -- THREAD TERMINATED.' );
end;
MTM_MESSAGE:
begin
if (
com.DebugMode )
then
AddLog( '
MSG -- THREAD SAYS: ' +
string( msg.lParam ), log_info, log );
AddSerialLog( '
MSG -- THREAD SAYS: ' +
string( msg.lParam ) );
end;
end;
end;
"
com" ist hier die Klasse, die den Thread benötigt um einen Timeout festzustellen.