![]() |
Threads mit Oberfläche synchronisieren (VCL)
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
anbei habe ich ein kleines Beispiel für die Synchronisierung von Threads mit der Anzeige erstellt. Was wird demonstriert In der Demo-Anwendung werden vier Szenarien demonstriert. Einmal Threads mit wenig Arbeit bis zur Darstellung von Informationen, und einmal Threads, welche mehr erledigen müssen, bevor Daten dargestellt werden. Beide Varianten stellen die Daten einmal direkt in der Anwendung dar (mittels Synchronize) und einmal mittels einem Zwischenspeicher. (2 x 2 Varianten = 4 verschiedene Szenarien). Wie wird demonstriert Die Demo besteht aus zwei Units
Was wird NICHT demonstriert Der gemeinsam genutzte Speicher
Delphi-Quellcode:
ist nicht die performanteste Variante, aber sie ist leicht zu verstehen. Je nach Datentypen, welche synchronisiert werden, muss man sich Gedanken machen, wie diese hinterlegt werden. Das kann eine Datenbank sein, eine einfache Variable, eine Klasse, oder wie hier gezeigt eine threadsichere Liste, oder, oder, oder...
TMyData = TThreadList<string>;
Sleep() ist nicht die beste Methode, einen hohen Workload zu simulieren, da der Thread nichts zu tun hat, für die Demo ist es aber ausreichend. Werte der Szenarien Wenig Arbeit
Viel Arbeit
Man erkennt also, dass, je mehr der Thread wirklich arbeitet, der Vorteil des Zwischenspeichers abnimmt. Aber, es ist immer noch eine signifikante Verbesserung (20%), welche gerade bei langwierigen Aufgaben bemerkbar wird. Erkenntnisse: Threads manchmal eventuell useless Gerade wenn Threads viele Informationen an die UI senden, und diese mittels Synchronize durchgeführt werden, fällt auf, dass es schnell dazu kommt, dass die UI nicht mehr auf User-Aktivitäten reagiert, da die Synchronisierung zu viel Zeit in Anspruch nimmt. Abschließende Worte Bei diesem Tutorial geht es nicht so sehr um die Verwendung von Threads, und wie man diese nutzt, sondern um ein einfaches Beispiel, wie ihr die generierten Daten zur Laufzeit in die Oberfläche bekommt. Dabei ist es sicherlich nicht sinnvoll, so wie hier gezeigt, jeden einzelnen Schritt darzustellen. ...:cat:... Keine Ahnung, wie ich Anhänge updaten kann, korrigierte Version weiter unten: ![]() |
AW: Threads mit Oberfläche synchronisieren (VCL)
Nettes Tutorial! Dazu habe ich gleich eine Frage.
Ich nutze seit langer Zeit einen etwas anderen Ansatz. Ich habe einen Thread der länger arbeiten muss. In diesem Thread weise ich einer gewissen Variablen (es ist ein Record, ich setze einen String im Rekord) einen Wert zu. Dieser Wert wird von einem anderen Thread überprüft und sobald eine Änderung + zeitliche Verzögerung von mindestens Zeit-X vorhanden ist wird synchronisiert. Mein Arbeiter-Thread synchronisiert nicht. Was ist davon zu halten? |
AW: Threads mit Oberfläche synchronisieren (VCL)
Zitat:
Gruß K-H |
AW: Threads mit Oberfläche synchronisieren (VCL)
Wie sähe das Gegenteil von Pollen denn mit einem Thread und Messages aus? (der Arbeiter-Thread pusht ja [setzt Variablen] und der andere ließt sie aus [pull])
Und kann ich dann trotzdem noch meine Variablen setzen wie aktuell auch |
AW: Threads mit Oberfläche synchronisieren (VCL)
Zitat:
|
AW: Threads mit Oberfläche synchronisieren (VCL)
So wie ich das jetzt verstanden habe sendet man eine Message und die wertet der Thread dann mit Peek aus.
So wie
Delphi-Quellcode:
dann darf man updaten?
if myMessage.message = vclDoUpdatem then
|
AW: Threads mit Oberfläche synchronisieren (VCL)
Zitat:
Danke ...:cat:... |
AW: Threads mit Oberfläche synchronisieren (VCL)
Habe das Tutorial angeschaut und folgende festgestellt:
|
AW: Threads mit Oberfläche synchronisieren (VCL)
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Korrigierte Version im Anhang. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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