Hi, ich muß diese Thema noch mal aufwärmen, da ich da noch ein paar Probleme habe.
Also ich erzeuge mir eine TThreadList, die ich beim Beenden des MainThread entfernen möchte.
Delphi-Quellcode:
procedure Tfrm_main.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
I: Integer;
r: Cardinal;
begin
for I := RS232ThreadList.Count-1 downto 0 do
begin
TComThread(RS232ThreadList[i]).StopListen;
TComThread(RS232ThreadList[i]).Terminate;
r:=WaitForSingleObject(TComThread(RS232ThreadList[i]).Handle, 1000);
//ShowMessage(IntToStr(r));
end;
end;
procedure Tfrm_main.FormCreate(Sender: TObject);
begin
RS232ThreadList:=TObjectList.Create;
end;
procedure Tfrm_main.FormDestroy(Sender: TObject);
begin
RS232ThreadList.Free;
end;
Sicherlich nicht korrekt, denn im FormDestroy kommt es beim RS232ThreadList.Free zu einer
Exception, da die Thread noch nicht beendet sind.
Bzw. genau genommen, lande ich in System.Classes im Destructor TThread.Destroy beim CloseHandle;
Meine Annahme, die Threads in der ThreadList sind noch nicht beendet.
Wie mache ich es richtig? Ich muß ja im OnCanClose auf das Beenden der Threads warten.