Thema: Delphi Thread beenden

Einzelnen Beitrag anzeigen

Walter Landwehr

Registriert seit: 28. Mär 2006
Ort: 32816 Schieder-Schwalenberg
384 Beiträge
 
Delphi 10.4 Sydney
 
#1

Thread beenden

  Alt 12. Mär 2017, 16:46
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.
Walter Landwehr
Mfg

Walter
  Mit Zitat antworten Zitat