Einzelnen Beitrag anzeigen

moonwhaler

Registriert seit: 22. Dez 2005
57 Beiträge
 
Delphi 5 Enterprise
 
#5

Re: TThread Probleme (Beenden eines Threads)...

  Alt 14. Sep 2006, 15:59
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.
  Mit Zitat antworten Zitat