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
Glados
(Gast)

n/a Beiträge
 
#1

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

  Alt 3. Nov 2017, 20:13
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 PostMessage(receiver, command, wParam, Integer(PChar(string)));
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
977 Beiträge
 
Delphi 6 Professional
 
#2

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

  Alt 3. Nov 2017, 20:35
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...
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#3

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

  Alt 3. Nov 2017, 20: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.210 Beiträge
 
Delphi 10.4 Sydney
 
#4

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

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

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

  Alt 3. Nov 2017, 22: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
 
#6

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

  Alt 3. Nov 2017, 22: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
 
#7

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

  Alt 3. Nov 2017, 22: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
 
#8

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

  Alt 3. Nov 2017, 22: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
 
#9

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

  Alt 3. Nov 2017, 22: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 22:24 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 03:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz