AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

FMX + UI aktualisieren

Ein Thema von TigerLilly · begonnen am 29. Okt 2019 · letzter Beitrag vom 31. Okt 2019
Antwort Antwort
Seite 2 von 2     12   
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
890 Beiträge
 
Delphi 10.4 Sydney
 
#11

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 09:55
In meiner Anwendung läuft eine Uhr mit, daher habe ich eh einen Timer am Laufen und dieser updated bei Bedarf dann auch weitere Elemente der Anzeige. Wenn man so etwas wie diese Uhr nicht hat, mag der Timer ineffektiv sein. So ist es die einfachste und übersichtlichste Lösung.
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#12

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 10:18
In meiner Anwendung läuft eine Uhr mit, daher habe ich eh einen Timer am Laufen und dieser updated bei Bedarf dann auch weitere Elemente der Anzeige. Wenn man so etwas wie diese Uhr nicht hat, mag der Timer ineffektiv sein. So ist es die einfachste und übersichtlichste Lösung.

Der Timer kann zu ungenau sein für eine Uhr.
Für eine Uhr würde ich immer die Systemzeit nehmen, z.B. mit Now();, und diese dann z.B. mit dem Timer (oder anders) aktualisiert anzeigen.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#13

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 12:51
Nein, wenn du ein Anzeige-Element hast das den Fortschritt aus 10 Threads anzeigt sitzt darauf ein Timer. Und den musst du auch nicht starten und stoppen, der kann ruhig immer laufen. Das kostet doch nichts.
Und wenn ich neben dem gesamt download den Fortschritt aller einzelnen Threads anzeigen möchte?
Dann ggf. noch eine Uhr, eine Statusanzeige die anzeigt, dass die Datenbank sich mit der Cloud synchronisiert.
Die Aktien chart, die upgedatet werden muss, uvm.
Und warum soll ich permanent einen Timer laufen lassen der immer wieder in einer Queue nachschaut, wenn es (wie mein Beispiel (#8) gezeigt habe) viel einfacher geht?
Ich möchte keinen Timer haben der immer läuft - schon gar nicht, wenn er permanent in einer Queue nachschauen muss die jedes mal hierfür ein locking durchführen muss.
Auf einem 5GHz PC mag das egal sein, aber sicherlich nicht in einer App die auf Batteriestrom läuft (z.B. Mobil-Device/Smartwatch).

Der Timer kann zu ungenau sein für eine Uhr.
Für eine Uhr würde ich immer die Systemzeit nehmen, z.B. mit Now();, und diese dann z.B. mit dem Timer (oder anders) aktualisiert anzeigen.
Ich denke so hat er das gemeint.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
890 Beiträge
 
Delphi 10.4 Sydney
 
#14

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 12:54
Ja, so war es mit dem Timer gemeint. Ich prüfe alle x Millisekunden, ob ich die Zeit, welche ich über NOW vergleiche, hochzählen muss. Und prüfe dann parallel, ob es sonst noch was in meiner Anwendung zu tun gibt (und das ist reichlich: UI-Updates, aktuell abgespieltes Musik/Video anpassen, …). Und drum herum passiert einiges in Threads.

Und meine Queue ist eine einfache TObjectList oder ein Dictionary (je nach Anwendungsfall), ich vermeide Locks und verhinderte auch, dass das gleiche Objekt mehrfach in der UI aktualisiert wird.
Geht sicherlich eleganter, aber funktioniert und ich vermeide synchronized und Locks, wo es nur geht.

Geändert von philipp.hofmann (30. Okt 2019 um 12:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 13:07
Und meine Queue ist eine einfache TObjectList oder ein Dictionary (je nach Anwendungsfall), ich vermeide Locks und verhinderte auch, dass das gleiche Objekt mehrfach in der UI aktualisiert wird.
Geht sicherlich eleganter, aber funktioniert und ich vermeide synchronized und Locks, wo es nur geht.
OK und wie? Wenn Du aus einem Thread in die Objectlist oder Dictionary schreibst musst Du verhindern, dass gleichzeitig Dein TimerEvent liest. Sicherlich ist lesen nicht so kritisch wie gleichzeitiges schreiben... Aber spätestens bei zwei threads must du locken.
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
890 Beiträge
 
Delphi 10.4 Sydney
 
#16

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 14:40
Sowohl beim Auslesen als auch beim Hinzufügen/Updaten von Einträgen gibt es ein try/catch, damit Fehler gefangen werden und in dem Fall bleibt dann mal ein Update der UI-Info aus. Das ist bei mir okay und spart Synchronisierungen.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#17

AW: FMX + UI aktualisieren

  Alt 30. Okt 2019, 21:50
Sowohl beim Auslesen als auch beim Hinzufügen/Updaten von Einträgen gibt es ein try/catch, damit Fehler gefangen werden und in dem Fall bleibt dann mal ein Update der UI-Info aus. Das ist bei mir okay und spart Synchronisierungen.
Das ist kein Mittel um Threadsafe auf eine Liste oder Dictionary zuzugreifen!
  Mit Zitat antworten Zitat
philipp.hofmann

Registriert seit: 21. Mär 2012
Ort: Hannover
890 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: FMX + UI aktualisieren

  Alt 31. Okt 2019, 15:55
War wie gesagt ("das ist bei mir okay") eine bewusste Entscheidung. Mit ein paar Zeilen zusätzlichen Code würde ich es threadsafe bekommen, aber da sich die Anzeige eh alle 500ms ändert, kann ich auf einige Updates dort auch verzichten, dafür laufen die Videos in der Anzeige flüssiger. Da muss man aber die jeweilige Anwendung genauer kennen, um zu wissen, ob dies geht oder nicht.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz