Registriert seit: 19. Apr 2005
Ort: Hückeswagen
335 Beiträge
Delphi 11 Alexandria
|
Datenübergabe aus Thread in MainForm
10. Okt 2022, 21:32
Hallo zusammen,
ich brauche mal einen Tipp für mein Problem.
Ich nutze die OmniThreadLib um Daten in einem Task aus einer Datenbank zu laden und sende diese dann per Message an die MainForm.
Diese zerlegt die Daten und zeigt sie auf dem Bildschirm an.
Der Task sammelt die Daten 100ms und sendet diese dann als Array of Variant.
Ich sende an den Task eine Nachricht "Lade mir bitte diese Daten" und dann führt der Task diese Aktion aus.
Ist er fertig wartet er auf den nächsten Befehl.
Auf der Maske ist noch ein "Stop" Knopf, der dem Task meldet, dass die aktuelle Aktion abgebrochen werden soll.
So weit so gut, klappt alles wunderbar.
Aber, wenn ich die Datenbank lokal betreibe liefert der Task die Daten scheinbar so schnell, dass ich überhaupt keine Chance habe den Stop Knopf zu drücken, da der Mainthread 100% Auslastung hat mit dem verarbeiten der Botschaften.
Es hilft, wenn ich eine Wartezeit einbaue, dass nach jedem Senden ein bisschen gewartet wird, aber das ist keine befriedigende Lösung.
Eine Nachricht an den Task senden, hilft auch nicht, da er den Befehl in einer Message bearbeitet und erst wieder die nächste Anfrage bearbeitet, wenn er mit der aktuellen Aufgabe fertig ist. Um das nutzen zu können, müsste ich das Konzept hier umbauen, was ich eigentlich nicht vor habe.
Schön wäre es, wenn ich irgendwie erkennen könnte, dass ich genau in diese Situation laufe.
Oder ist es sinnvoll, dass der Task so lange wartet, bis der MainThread die aktuelle Aktion verarbeitet hat?
Gibt es da irgendwas integriertes in der Lib? Bis jetzt habe ich leider nichts gefunden.
LG
Oliver
Oliver
|