Hallo, Ich weiß es ist schon vieles über Thread beenden geschrieben worden aber das richtige habe ich noch nicht gefunden.
Also ich erzeuge einen Thread so.
Delphi-Quellcode:
public
{ Public-Deklarationen }
calSyncThread: TNxSyncThread;
procedure ThreadErzeugen(doResume: Boolean=true);
procedure Threadbeenden;
implementation
procedure TdmMain.ThreadErzeugen(doResume: Boolean=true);
begin
if CalSyncThread = nil then begin
calSyncThread := TNxSyncThread.Create (True);
calSyncThread.Server := ibconMain.Server;
calSyncThread.Path := ibconMain.Path;
calSyncThread.LogViewEnabled := False; // für Debug auf True stellen
calSyncThread.Protocol := ibconMain.Protocol;
calSyncThread.StartWork;
calSyncThread.OnTerminate := TerminateCalSynThread;
calSyncThread.FreeOnTerminate := False; // 11.03.2017 WL
end;
if doResume then
calSyncThread.Resume;
end;
und will ihn so beenden:
Delphi-Quellcode:
procedure TdmMain.Threadbeenden;
begin if CalSyncThread = nil then Exit;
if CalSyncThread.Worker <> nil then begin
try
CalSyncThread.Worker.stopped := true;
CalSyncThread.Terminate;
while CalSyncThread.running do begin ---------> An dieser Stelle kommt ab und zu eine Schutzverletzung aber nicht immer.
Application.ProcessMessages;
Sleep(0);
end;
CalSyncThread.Worker.StoreRefrehToken;
CalSyncThread.Worker.NxHelper.con.Connected := false;
// FreeAndNil(CalSyncThread);
except;
end;
end;
calSyncThread.suspend;
Wer weiß wie ich den Thread sauber beende.