![]() |
TThread synchronize und Hauptthread
Hallo Gemeinde,
ich beschäftige mich gerade etwas mit Threads und mir ist da eine Frage eingefallen, zu der ich bisher in Gooxxx keine Antwort gefunden habe: Angenommen mein Hauptthread hat ein Formular mit einem Label und eine procedure dieses Label zu aktualisieren (updateLabel). In meinem Formular wird ein weiterer Thread erzeugt, der irgendwelche Berechnungen ausführt und ab und an das Label des Formulars aktualisieren soll. Dazu muss ja im Thread ein synchronize(updateLabel) aufgerufen werden. Kann der Hauptthread diese Methode(updateLabel) gefahrlos parallel aufrufen, oder muss ich die dann noch über z.B. CriticalSections absichern? Danke schon mal vorab |
AW: TThread synchronize und Hauptthread
Das Synchronize sorgt dafür, dass die übergebene Methode im Hauptthread ausgeführt wird. Man braucht (und sollte) dann nicht noch zusätzlich etwas machen.
|
AW: TThread synchronize und Hauptthread
In dem Moment, wenn Du Synchronize(MainForm.UpdateLabel) aufrufst, wird der Mainthread unterbrochen.
(Ist technisch gesehen nicht ganz korrekt, aber so kann man es vereinfacht sehen.) Wenn Du also z.B. UpdateLabel auch von einem Timer aus aufrufst, werden sich beine Aufrufe nicht in die Quere kommen. |
AW: TThread synchronize und Hauptthread
Zitat:
|
AW: TThread synchronize und Hauptthread
Synchronize verwendet windows messages, daher ist man immer in der Ebene der Tastatureingaben, Timer und anderen Ereignisse.
Ich würde eher auf Synchronize verzichten und stattdessen das Label periodisch updaten. Man kann entweder ein PostMessage im Thread verwenden oder einen Timer um dem Programm mitzuteilen, dass es updaten soll. Die Daten für das Label müssen natürlich geschützt sein mit TMonitor.Enter/Exit |
AW: TThread synchronize und Hauptthread
Zitat:
VIELEN DANK! |
AW: TThread synchronize und Hauptthread
Genau.
Application.ProcessMessages drängelt sich aber bei der Bearbeitungsreihenfolge dazwischen. Also wenn man dieses einsetzt kann es durchaus Probleme geben. Entsprechend sollte man das - insbesondere bei der Verwendung von Threads besser vermeiden. |
AW: TThread synchronize und Hauptthread
"Entsprechend sollte man das - insbesondere bei der Verwendung von Threads besser unbedingt vermeiden."
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz