Einzelnen Beitrag anzeigen

Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Thread für einfache Funktionsauslagerungen

  Alt 20. Jun 2012, 13:11
Hi ibp,

also so wie ich das sehe, würde ich im Thread auf jedenfall eine eigene Connection aufbauen. Außerdem sei beachtet, dass der Constructor des Threads im Kontext des aufrufenden Threads - also nach Deinem Beispiel wahrscheinlich des Hauptthreads - ausgeführt wird. Ich würde daher alle Speichersachen erst am Anfang von Execute erzeugen/anlegen und auch am ende von Execute freigeben.
[EDIT]Wurde ja schon so von sirius geschrieben [/EDIT]

Dann der Aufruf. Es gibt da eben zwei Möglichkeiten - die eine ist nach meiner Ansicht der lineare Ansatz mit warten auf Beendigung wie du es gemacht hast. Sleep ist dafür nach meiner Meinung schlecht ich würde eher aktives Warten machen -> mit z.B. sowas.

Der andere ist der Ereignisgesteuerte. D.h. zerteilen von start und ende. Es gibt eine Methode die den Start steuert und nach dem Start der Threads die Oberfläche in einen "Bitte warten Zustand" bringt und damit endet. Dem Thread wird noch eine Methode übergeben für Beenden - vielleicht mit einer Aussage wie erfolgreich das war was er tun soll. In dieser Methode wird dann die Bedienung der Oberfläche wieder frei gegeben z.B. Statusbar wird wieder geschlossen - und alles andere was noch so gemacht werden muss, nachdem die Aufgabe des Threads erledigt ist.

Gruß, Chris

[EDIT]
Endlosschleife würde ich über das OnTerminate-Event des Threads verhindern mit einer lokalen Variable in der Anwendung. Diese Variable wird bei OnTerminate gesetzt und neben InProgress mit abgefragt while MyThread.InProgress and l_IsRunning do [/EDIT]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules

Geändert von ChrisE (20. Jun 2012 um 13:19 Uhr)
  Mit Zitat antworten Zitat