Autor Beitrag
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8548
Erhaltene Danke: 477

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Fr 19.05.06 10:06 
Ich hab da ja so meine Probleme mit Threads :mrgreen:

Ich habe mir mal gemerkt, dass "Threads + Zugriffe auf VCL = böse". Hab interessehalber mal ausprobiert, innerhalb der execute-Routine eines TThread-Objects einfach so auf die VCL zuzugreifen, und natürlich ist mir das Programm sofort um die Ohren geflogen. So was muss man synchronisieren, klar.

Jetzt bin ich in einem kleinen Beispielprogramm zur Bass.dll auf BeginThread gestoßen, und in der dort aufgerufenen Thread-Funktion wird fröhlich auf Variablen und Label der Hauptform zugegriffen (auch schreibend), und nichts passiert (also nichts schlimmes, sondern nur das gewollte).
Ich habe auch gelesen, dass BeginThread dafür sorgt, dass IsMultiThread auf True gesetzt wird, wodurch der Heap thread-safe wird.

Heißt das nun, dass ich unbesorgt in der Threadfunktion auf die VCL zugreifen darf, oder muss ich da noch was beachten? Und wenn ja, wie mach ich das?
Und kann ich den Thread ggf. dadurch vorzeitig beenden, dass ich bei Klick auf "Abbrechen" eine Property der Form setze, und diese an verschiedenen Stellen in der Threadfunktion abfrage mit if Form1.ThreadAbort then exit;?

_________________
We are, we were and will not be.