Delphi-PRAXiS
Seite 3 von 4     123 4      

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 19:40

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

ohne Verwendung von Synchronize...
Genau aus demselben Grund versuche ich diese komischen Umwege ja auch :P

Bernhard Geyer 3. Nov 2017 20:50

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

Zitat von HolgerX (Beitrag 1385054)
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 ;)

Es war kein Problem das es überhaupt nicht funktioniert hat sondern hin und wieder einfach nicht angekommen ist.

Zacherl 3. Nov 2017 21:00

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Also WM_COPYDATA ist eigentlich eh nur für IPC gedacht. Wenn man damit eh gezwungenermaßen MSDN-Library durchsuchenSendMessage verwenden muss, dann kannst du genausogut eine eigene Message definieren und einfach lParam oder wParam auf deinen Record zeigen lassen. Hier hast du aber dann das exakt gleiche Verhalten wie bei
Delphi-Quellcode:
TThread.Synchronize
, sprich: Der aufrufende Thread wird solange blockiert, bis das Mainthread die Nachricht abgearbeitet hat.

Glados 3. Nov 2017 21:02

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Außer ich nutze PostMessage. Das entspricht dann ja, wie du sagtest, etwa Queue.

Was ist denn dann die richtige Methode um die GUI aus einem Thread zu aktualisieren?

Zacherl 3. Nov 2017 21:08

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

Zitat von Glados (Beitrag 1385071)
Außer ich nutze PostMessage. Das entspricht dann ja, wie du sagtest, etwa Queue.

So wie ich Bernhard verstanden habe, erfordert WM_COPYDATA zwangsweise MSDN-Library durchsuchenSendMessage.

Zitat:

Zitat von Glados (Beitrag 1385071)
Was ist denn dann die richtige Methode um die GUI aus einem Thread zu aktualisieren?

Wie gesagt: Nimm einfach
Delphi-Quellcode:
TThread.Queue
:)

Glados 3. Nov 2017 21:15

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Nee Synchronize und Queue hab ich doch erst kürzlich fast völlig ausgemerzt und einen guten Performancevorteil spürbar gemacht :P

EWeiss 3. Nov 2017 21:18

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Er könnte es ja eventuell auch mal mit PostThreadMessage versuchen.
Aber ich glaube das ist genauso wenig möglich wie mit PostMessage.

laut MSDN wird davon abgeraten etwas anderes als SendMessage zu verwenden.

gruss

Glados 3. Nov 2017 21:33

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

laut MSDN wird davon abgeraten etwas anderes als SendMessage zu verwenden.
Ich habe irgendwo mal gelesen man soll Send bzw Synchronize verwenden wenn man die dadurch erhaltenen Daten danach sofort braucht. Ansonsten kann man Post/Queue verwenden.
Wo ich das gelesen habe weiß ich nicht mehr.

TiGü 6. Nov 2017 07:31

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

Zitat von Glados (Beitrag 1385074)
Nee Synchronize und Queue hab ich doch erst kürzlich fast völlig ausgemerzt und einen guten Performancevorteil spürbar gemacht :P

Nimm einfach TThread.Queue.
Deine Performanceprobleme haben höchstwahrscheinlich andere Ursachen.

Beliebter Anfängerfehler ist zum Beispiel der Versuch den Fortschritt einer Dateioperation (aus dem Internet downloaden oder Datei kopieren) im Mainthread per Progressbar sichtbar zu machen.
Dabei wird jedes Datenpaket und/oder schlimmer noch jedes einzelne neue Byte an den Mainthread signalisiert, anstatt die prozentuale Änderung im Thread zu berechnen und damit maximal ca. 100 mal den Mainthread signalisieren zu müssen.
Günstiger wären auch größere Schrittweiten möglich (5 oder 10 %).

Glados 6. Nov 2017 10:29

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

Nimm einfach TThread.Queue.
Deine Performanceprobleme haben höchstwahrscheinlich andere Ursachen.
Ich will mich jetzt nicht selber zitieren. Aber ich habe Queue rausgenommen eben WEIL es Probleme verursacht hat.
Mit PostMessage sind die Probleme weg.

Wieso wiederholt ihr dann immer wieder denselben Quark :roll:

Ist mit jedenfalls ab sofort egal. Bin raus hier.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:19 Uhr.
Seite 3 von 4     123 4      

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