AGB  ·  Datenschutz  ·  Impressum  







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

Gauge Refresh-Probleme

Ein Thema von andresku · begonnen am 6. Apr 2011 · letzter Beitrag vom 6. Apr 2011
Antwort Antwort
Seite 1 von 2  1 2      
andresku

Registriert seit: 6. Apr 2011
9 Beiträge
 
#1

Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:04
Hallo,

ich pflege ein Programm, in dem 6 Messwerte, die sich im 0,3 Sek. Takt verändern in 6 Gauges dargestellt werden. Ich habe hier 2 Probleme:
1. Nach der Werteänderung wird der Gauge-Refresh gelegentlich nicht durchgeführt (Gauge wird in komplementären Farben dargestellt - statt blau auf weiß kommt gelb auf schwarz).
2. Ebenfalls gelegentlich (selten) kommt es zu einem Grafik-Fehler (das Lesethread der Messwerte wird damit beendet).

Ist ähnliches Problem jemandem bekannt?
Was kann man tun um die Änderungen aller 6 Gauges gleichzeitig darzustellen? Gauge, wie auch das Vater-Objekt TGridPanel, kennen die Prozeduren "BeginUpdate-EndUpdate" leider nicht...
Ein Refresh des TGridPanel nach jedem Schleifendurchgang ist möglich und hilft, verursacht aber ein unschönes flackern des Blides. Ausserdem es hilft bei den Grafikabbrüchen nicht weiter. Das Problem mit den Abbrüchen sieht auf verschiedenen Rechnern unterschiedlich aus - ich vermute ein Zusammenhang mit der Qualität des Grafiktreibers. Das Bisschen "Rechteckzeichnen" sollte aber doch in Wirklichkeit kein Anspruch für die Grafik des Rechners darstellen...

Gruß

Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:09
  1. Invalidate ist ggf. dem Refresh (oder Repaint) vorzuziehen.
  2. Aktiviere DoubleBuffered, um das Flackern zu unterdrücken.
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:15
Hallo,
... 2. Ebenfalls gelegentlich (selten) kommt es zu einem Grafik-Fehler (das Lesethread der Messwerte wird damit beendet).
das heißt aber nicht, dass der Thread für die Aktualisierung sorgt?
Keine Zugriffe auf die VCL aus einem Thread heraus - außer Synchronized o.ä.

Gruß, Chris

[EDIT]
Welches Betriebssystem verwendetst du?
[/EDIT]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules

Geändert von ChrisE ( 6. Apr 2011 um 11:16 Uhr) Grund: Betriebssystemfrage
  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#4

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:18
Oh,

willkommen in der DP
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules
  Mit Zitat antworten Zitat
andresku

Registriert seit: 6. Apr 2011
9 Beiträge
 
#5

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:39
Zitat:
das heißt aber nicht, dass der Thread für die Aktualisierung sorgt?
Keine Zugriffe auf die VCL aus einem Thread heraus - außer Synchronized
Doch, der Thread, der aus USB liest, greift auf VLC (Gauges + Labels). Es gibt aber außer diesem einen Thread keinen anderen (bis auf den Hauptthread), der dazwischen Funken könnte. Ist es trotzdem schlecht?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#6

Qu

  Alt 6. Apr 2011, 11:42
Das ist in der Tat schlecht, da die VCL nicht threadsafe ist. Ein Zugriff aus einem TThread heraus auf VCL-Komponenten darf nur über Delphi-Referenz durchsuchenSynchronize (oder IIRC neuerdings Queue) erfolgen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Deep-Sea
Deep-Sea

Registriert seit: 17. Jan 2007
907 Beiträge
 
Delphi XE2 Professional
 
#7

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:44
Es gibt aber außer diesem einen Thread keinen anderen (bis auf den Hauptthread), der dazwischen Funken könnte.
Tja, damit ist die Frage doch beantwortet, oder?!
Die VCL ist nicht threadfest - das ist kein Geheimnis. Also musst du deine Software ändern, dann sollten die Probleme verschwinden

[...] nur über Synchronize [...]
Oder aber auch PostMessage und SendMessage
Chris
Die Erfahrung ist ein strenger Schulmeister: Sie prüft uns, bevor sie uns lehrt.
  Mit Zitat antworten Zitat
andresku

Registriert seit: 6. Apr 2011
9 Beiträge
 
#8

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:46
Einleuchtend!

Danke

  Mit Zitat antworten Zitat
Benutzerbild von ChrisE
ChrisE

Registriert seit: 15. Feb 2006
Ort: Hechingen
504 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:46
Hallo,
Es gibt aber außer diesem einen Thread keinen anderen (bis auf den Hauptthread), der dazwischen Funken könnte. Ist es trotzdem schlecht?
Ja, dass ist leider schlecht
Die VCL ist nicht Threadsave und sollte nur vom Hauptthread "benutzt" werden.
[ROTER KASTEN -> Mist DeddyH war schneller]
Entweder Synchronized aufrufe wie DeddyH empfiehlt, oder die speicherst den Wert in einem Puffer und schickst der Application / dem MainForm per PostMessage eine Nachricht, dass neue Werte da sind. Diese kann die Werte dann aus dem Puffer abholen und darstellen.

Welche variante du nimmst hängt meines erachtens davon ab, ob der USB-Thread zeitkritisch ist oder nicht. Wenn er so schnell wie möglich wieder zum "USB-Lesen" übergehen soll, würde ich die Puffer-Variante nehmen.

Gruß, Chris

[EDIT]
Mist, war viel zu langsam
[/EDIT]
Christian E.
Es gibt 10 Arten von Menschen, die die Binär lesen können und die die es nicht können

Delphi programming rules

Geändert von ChrisE ( 6. Apr 2011 um 11:47 Uhr) Grund: Roter Kasten war schneller ;-)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#10

AW: Gauge Refresh-Probleme

  Alt 6. Apr 2011, 11:55
[...] nur über Synchronize [...]
Oder aber auch PostMessage und SendMessage
Mit SendMessage wäre ich in diesem Zusammenhang aber seeehr vorsichtig
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 11:32 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