Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

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)

Zacherl 6. Nov 2017 10:34

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

Zitat von Glados (Beitrag 1385323)
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.

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
Delphi-Quellcode:
Tthread.Queue
). Falls du das komplette Projekt hochladen kannst/willst, würde ich sogar mal drüberschauen. Gerne auch per PN.

Zacherl 6. Nov 2017 14:06

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Liste der Anhänge anzeigen (Anzahl: 2)
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
Delphi-Quellcode:
TThread.Synchronize
von der Performance her minimal schlechter.
Delphi-Quellcode:
TThread.Queue
ist genauso schnell wie MSDN-Library durchsuchenSendMessage oder MSDN-Library durchsuchenPostMessage.

Synchronisiert wird jeweils wenn
Delphi-Quellcode:
Value mod 100000 = 0
, also jeweils nach 100.000 Iterationen.

Glados 6. Nov 2017 23:03

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
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.

Zacherl 6. Nov 2017 23:34

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

Zitat von Glados (Beitrag 1385421)
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
Delphi-Quellcode:
TThread.Queue(TThread.Current, ...)
. Der Aufruf von
Delphi-Quellcode:
TThread.Current
könnte deinen Test allerdings verfälschen.

Glados 6. Nov 2017 23:41

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Ich bastel erstmal das Grundgerüst zusammen und gucke was sich dann anbietet.

Zacherl 7. Nov 2017 00:06

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Habe mein Testprojekt mal aufgeräumt und angehangen. Ist sicherlich keine ganz perfekte Messung, aber egal was ich probiere:
Delphi-Quellcode:
TThread.Queue
ist gleich schnell wie
Delphi-Quellcode:
PostMessage
und
Delphi-Quellcode:
TThread.Synchronize
gleich schnell wie
Delphi-Quellcode:
SendMessage
.

Glados 7. Nov 2017 00:09

AW: PostMessage mit WndProc oder WMCopyData/Record aus Thread für GUI-Aktualisierung?
 
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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:59 Uhr.
Seite 4 von 4   « Erste     234   

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