Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TJvTimer (https://www.delphipraxis.net/190441-tjvtimer.html)

Luckner 5. Okt 2016 14:14

AW: TJvTimer
 
werde ich ausprobieren. Es sind wirklich nicht viele Datensätze. So um die 50-60. Sleep werde ich sofort ausprobieren.

himitsu 5. Okt 2016 14:24

AW: TJvTimer
 
Die Oberfläche bekommt das mit. Glaubt's mir ruhig, denn das DataSet ist so nett und informiert die DataSource, die den DataLink, der den DataController und am Ende bekommt auch das Grid umgehend mit, wenn aktualisiert wurde.
(außer bei DisableControls, aber dort wird das im EnableControls nachgeholt)

Zitat:

Zitat von Luckner (Beitrag 1349832)
Aber irgenwie funktioniert der Timer nicht mit diesem Grid zusammen. Es zuckt nicht mal beim Schliessen und Öffnen des Datasets.

Das DataSet hält die Daten, eine DataSource bildet die Schnittstelle zwischen DataSet und DataLink und zuletzt der DataLink dann als Schnittstelle zum DataController des Grids,
der DataController kopiert sich sie Daten aus dem DataSet und stellt sie für das Grid bereit und das Grid läd dann die Daten aus dem DataController.
Weder DataSet, noch DataSource, DataController, DataLink, Grid und vorallem nicht fast die ganze VCL sind threadsave.

Wenn da gleichzeitig das Grid versucht zu lesen/zeichnen, während ein anderer Idiot unsynchronisiert an den Daten rumpfuscht, weil er das DataSet aktuallisiert, dann kommt es nunmal schnell zu eine klitzekleinem Problemchen.

Aber da das keiner kappieren will, bin ich hier raus.
Tschau und viel Glück noch.

Luckner 5. Okt 2016 15:10

AW: TJvTimer
 
Sleep hat auch nichts gebracht.
An himitsu: Wenn ich das Dataset.close mache und so belasse, dann bekommen ich, nach der Timerzeit, ein leeres Grid (mit einer leeren Zeile). Wenn ich aber Datase.close und dan Datase.open, dann müsste das Grid wenigstens zucken. Aber es passiert nichts.

Aviator 5. Okt 2016 15:14

AW: TJvTimer
 
Zitat:

Zitat von Luckner (Beitrag 1349856)
Sleep hat auch nichts gebracht.
An himitsu: Wenn ich das Dataset.close mache und so belasse, dann bekommen ich, nach der Timerzeit, ein leeres Grid (mit einer leeren Zeile). Wenn ich aber Datase.close und dan Datase.open, dann müsste das Grid wenigstens zucken. Aber es passiert nichts.

Da du nach dem Close ein Sleep(x) ausführst und danach direkt wieder öffnest, hat die GUI gar keine Möglichkeit sich zu aktualisieren bevor die neuen Daten kommen. Folglich siehst du auch nicht, dass das Grid "zuckt" und aktualisiert wird. Wenn du jetzt im Main Thread bist, kannst du mal versuchen vor dem Sleep(x) ein Application.ProcessMessages einzubauen. Dann bekommt die GUI wenisgtens noch Zeit sich vor dem Sleep einmal zu aktualisieren.

Aber das ist keine gängige Methode. Application.ProcessMessages solltest du eigentlich wenn möglich vermeiden und alles über Threads und dem entsprechenden Synchronize() ausführen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 Uhr.
Seite 3 von 3     123   

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 by Thomas Breitkreuz