Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung? (https://www.delphipraxis.net/194260-postmessage-mit-wndproc-oder-wmcopydata-record-aus-thread-fuer-gui-aktualisierung.html)

Glados 3. Nov 2017 15:30

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Zitat:

Bei vielen deiner Fragen denke ich an klassisches "Overengineering"
Ich versuche nur das umzusetzen, was hier immer angepriesen wird: GUI nicht aus einem Thread heraus aktualisieren :stupid:

Zacherl 3. Nov 2017 15:31

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Zitat:

Zitat von Glados (Beitrag 1385015)
Zitat:

Bei vielen deiner Fragen denke ich an klassisches "Overengineering"
Ich versuche nur das umzusetzen, was hier immer angepriesen wird: GUI nicht aus einem Thread heraus aktualisieren :stupid:

Das ist auch definitiv gut :thumb: Ich bezog mich eher darauf, dass du manchmal recht geschickt bist, die Delphi eigenen Funktionen durch Eigenentwicklungen ersetzen zu wollen :-D

Glados 3. Nov 2017 15:38

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Geschickt würde ich nicht sagen. Ich setze einfach 08 und 15 zusammen und erhalte 0815-Lösungen.

Was könnt ihr Profis denn abschließend dazu sagen: Queue oder WndProc mit PostMessage und Record.
Es geht hier um Threads die einiges zu tun haben und die GUI recht häufig und schnell hintereinander aktualisieren, da es um Live-Daten geht wenn man das so nennen kann.

Edelfix 3. Nov 2017 15:44

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Währe TThreadedQueue eventuell ein Weg?
Mit einem extra Thread der die GUI aktualisiert und der pull das Queue leert. So können mehreren Threads die das Queue per push voll machen ohne zu blockieren.

Glados 3. Nov 2017 15:46

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Von TThreadedQueue höre ich zum ersten mal.

Wie würde denn dann aus diesem Extra-Thread heraus aktualisiert. Auch wieder mit Synchronize?

Edelfix 3. Nov 2017 16:01

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Ja mit Synchronize.

Ich habe kein Beispiel und habe damit bis jetzt nur eine Log Funktion umgesetzt aber die Idee fand ich gut.

Wenn ich das richtig verstanden hatte dann funktioniert die TThreadedQueue wie eine Art Spender (z.B. Rollen Spender).
Oben wird nachgefüllt und unten nach und nach leer gemacht.

Ist im Grunde wie ein Puffer der den Job Threads die Warte Zeit abnimmt.

Glados 3. Nov 2017 16:02

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread heraus?
 
Nur dann wäre ich ja wieder beim Synchronize, wovon ich eigentlich weg möchte.

Bernhard Geyer 3. Nov 2017 18:44

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Ich habe jetzt nicht gesehen ob es schon angesprochen wurde:
WM_COPYDATA muss mit SendMessage verwendet werden und WM_COPYDATA hat bei uns (früher) nicht als Kommunikation im Prozess funktioniert (nur zwischen Prozessen).

Glados 3. Nov 2017 19:13

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Zitat:

WM_COPYDATA muss mit SendMessage verwendet werden und WM_COPYDATA hat bei uns (früher) nicht als Kommunikation im Prozess funktioniert (nur zwischen Prozessen).
Funktioniert bei mir wie gewünscht im selben Prozess.
Ich glaube ich bleibe aber bei WndProc. Ob ich ein ganzes Record schicke muss ich noch gucken. Eventuell schicke ich Strings sogar nur so
Delphi-Quellcode:
PostMessage(receiver, command, wParam, Integer(PChar(string)));

HolgerX 3. Nov 2017 19:35

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Hmm..

das mit WM_COPYDATA kann im selben Process nur funktionieren, wenn zwischen verschiedenen Threads..

Denn die Message kann im selben Thread nicht abgearbeitet werden, da diese ja noch auf das Return vom SendMessage wartet ;)

Ich habe dies benutzt, um Texte aus Threads heraus an den MainThread zu schicken ohne Verwendung von Synchronize...


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:07 Uhr.
Seite 2 von 4     12 34      

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