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 4 von 4   « Erste     234   
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 6. Nov 2017, 10:34
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.
Sind ja nur nett gemeinte Hinweise. Ich bin nebenbei erwähnt auch TiGüs Meinung, dass deine Performanceprobleme eine andere Ursache haben (falsche Verwendung von Tthread.Queue ). Falls du das komplette Projekt hochladen kannst/willst, würde ich sogar mal drüberschauen. Gerne auch per PN.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 6. Nov 2017, 14:06
Habe das jetzt nochmal getestet mit einem Thread, der exakt 1 Sekunde lang einen Wert in einer Schleife inkrementiert.

Bild 1 zeigt den endgültigen Wert der Variable nach Beendigung des Thread.
Bild 2 führt nebenher den gleichen Task auch nochmal im Main Thread aus.

Wie man sieht es lediglich TThread.Synchronize von der Performance her minimal schlechter. TThread.Queue ist genauso schnell wie MSDN-Library durchsuchenSendMessage oder MSDN-Library durchsuchenPostMessage.

Synchronisiert wird jeweils wenn Value mod 100000 = 0 , also jeweils nach 100.000 Iterationen.
Miniaturansicht angehängter Grafiken
1.png   2.png  
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#33

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

  Alt 6. Nov 2017, 23:03
Muss ich Queue aus dem Thread heraus aufrufen oder kann ich im Thread eine Prozedur in einer anderen Unit aufrufen und von dort aus Queue?
Wenn letzteres möglich ist, könnte ich Queue und PostMessage direkt gegenüberstellen und mit nur einer einzigen geänderten Zeile testen.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 6. Nov 2017, 23:34
Muss ich Queue aus dem Thread heraus aufrufen oder kann ich im Thread eine Prozedur in einer anderen Unit aufrufen und von dort aus Queue?
Ja. Die Funktion muss allerdings die Instanz des Threads übergeben bekommen. Alternativ kannst du auch ohne Instanz folgendes machen TThread.Queue(TThread.Current, ...) . Der Aufruf von TThread.Current könnte deinen Test allerdings verfälschen.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#35

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

  Alt 6. Nov 2017, 23:41
Ich bastel erstmal das Grundgerüst zusammen und gucke was sich dann anbietet.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

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

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

  Alt 7. Nov 2017, 00:06
Habe mein Testprojekt mal aufgeräumt und angehangen. Ist sicherlich keine ganz perfekte Messung, aber egal was ich probiere: TThread.Queue ist gleich schnell wie PostMessage und TThread.Synchronize gleich schnell wie SendMessage .
Angehängte Dateien
Dateityp: rar ThreadSyncTest.rar (49,3 KB, 10x aufgerufen)
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Glados
(Gast)

n/a Beiträge
 
#37

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

  Alt 7. Nov 2017, 00:09
Dann bleibe ich der Einfachheit halber bei PostMessage. Das ist alles schon implementiert und kann nur besser gemacht werden.
Alles zu Queue umzuändern würde wieder alles über den Haufen werfen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 01:16 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