Einzelnen Beitrag anzeigen

Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#1

Threads create/terminate

  Alt 18. Dez 2014, 10:28
Das mit den Threads hab ich noch nicht so drauf und Google mich schon seit ner Weile im Ringel rum. Für euch ist das sicherlich ne ganz einfache Geschichte, mir fehlt hier grad das Verständnis.

Was ich habe:
Wenn in einer Grid gescrollt wird, wird mithilfe eines Threads eine Datei via FTP-Download auf die Festplatte gespeichert und mit einem TWebBrowser angezeigt.

Wie ich es umgesetzt habe:
Im GridOnClick wird ein Thread kreiert:
Delphi-Quellcode:
  AFTPThread := TFTPThread.Create(Dateiname,
                                  DoFTPOnLoading,
                                  DoFTPOnComplete);
Im DoFTPOnLoading ist eine Fortschrittsanzeige, im DoFTPOnComplete mache ich das WebBrowser.Navigate. Beide Proceduren werden per Synchronize aufgerufen.

Früher hatte ich die Fortschrittsanzeige und das Navigate im Thread, was ja nicht richtig war, da nicht threadsave. Deswegen habe ich die Anzeige nun in den Hauptthread verlagert. Dadurch kann ich jetzt FreeOnTerminate auf True setzen ohne dass ich Zugriffsverletzungen bekomme *jubel. Dadurch kann ich nun auch auf diese Zeilen, die ich bislang x-mal im Code hatte verzichten:

Delphi-Quellcode:
  if Assigned(AFTPThread) then
  begin
    AFTPThread.Terminate;
    AFTPThread.WaitFor;
    FreeAndNil(AFTPThread);
  end;
Prima! Nun zu meinen Fragen:

Wann muss ich denn jetzt was genau tun? Vor dem TFTPThread.Create muss ich sicherlich ein
Delphi-Quellcode:
if Assigned(AFTPThread) then
  begin
    AFTPThread.Terminate;
  end;
machen. Oder ein FreeAndNil? Ein FreeOnTerminate macht mir meine Variable ja nicht Nil, stimmt das Assigned dann überhaupt? Muss ich was abbrechen/freigeben, wenn das Formular geschlossen wird? Muss die Variable AFTPThread wirklich im Formular deklariert sein?
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat