AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Glados · begonnen am 3. Nov 2017 · letzter Beitrag vom 7. Nov 2017
Antwort Antwort
Seite 3 von 4     123 4      
Glados
(Gast)

n/a Beiträge
 
#21

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

  Alt 3. Nov 2017, 19:40
Zitat:
ohne Verwendung von Synchronize...
Genau aus demselben Grund versuche ich diese komischen Umwege ja auch
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#22

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

  Alt 3. Nov 2017, 20:50
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#23

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

  Alt 3. Nov 2017, 21:00
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 TThread.Synchronize , sprich: Der aufrufende Thread wird solange blockiert, bis das Mainthread die Nachricht abgearbeitet hat.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#24

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

  Alt 3. Nov 2017, 21:02
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?
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#25

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

  Alt 3. Nov 2017, 21:08
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.

Was ist denn dann die richtige Methode um die GUI aus einem Thread zu aktualisieren?
Wie gesagt: Nimm einfach TThread.Queue
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#26

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

  Alt 3. Nov 2017, 21:15
Nee Synchronize und Queue hab ich doch erst kürzlich fast völlig ausgemerzt und einen guten Performancevorteil spürbar gemacht
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#27

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

  Alt 3. Nov 2017, 21:18
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

Geändert von EWeiss ( 3. Nov 2017 um 21:24 Uhr)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#28

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

  Alt 3. Nov 2017, 21:33
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.
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.060 Beiträge
 
Delphi 10.4 Sydney
 
#29

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

  Alt 6. Nov 2017, 07:31
Nee Synchronize und Queue hab ich doch erst kürzlich fast völlig ausgemerzt und einen guten Performancevorteil spürbar gemacht
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 %).
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#30

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

  Alt 6. Nov 2017, 10:29
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

Ist mit jedenfalls ab sofort egal. Bin raus hier.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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:02 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