![]() |
AW: Thread Synchronize Fragen
Blub :lol: (siehe Seite 3)
|
AW: Thread Synchronize Fragen
Zitat:
Delphi-Quellcode:
bleiben willst, nein. Ich würde
PostMessage
Delphi-Quellcode:
verwenden. Das ist wesentlich besser lesbar und deutlich flexibler.
TThread.Queue
|
AW: Thread Synchronize Fragen
Zitat:
Es ist besser lesbar und dafür gibt es 100 Punkte mehr als für PostMessage. Aber PostMessage, muss man leider sagen, ist wesentlich performanter wenn man das mehrere Tausend mal in 20 Sekunden ausführt. |
AW: Thread Synchronize Fragen
Zitat:
Zitat:
Die auszuführende Prozedur wird per Queue in eine Liste geschrieben. Dann wird der Hauptthread aufgeweckt indem ihm per PostMessage (sieh mal an!) ein WM_NULL geschickt wird. In der Application.WndProc wird diese Message dann mit einem CheckSynchronize verarbeitet. Das CheckSynchronize arbeitet dann alle aktuell in der Liste stehenden Queue-Procs ab. Gegenüber einer reinen PostMessage-Lösung könnte sich hier eigentlich nur die Verwaltung der Liste auf die Performance auswirken. |
AW: Thread Synchronize Fragen
Zitat:
Der Quelltext ist dadurch sehr viel kürzer und übersichtlicher geworden und wurde von der Performance her tendentiell eher etwas schneller. Einen großen eindeutig messbaren Unterschied gab es jedenfalls nicht und damit gewinnt der bessere Code. |
AW: Thread Synchronize Fragen
Zitat:
Beispiel 2: gegeben ist ein Thread der alle 25ms die Position einer ProgressBar setzt. Gerade bei Beispiel 2 konnte ich große Unterschiede bzgl eines ruckelfreien Hauptformulars feststellen. |
AW: Thread Synchronize Fragen
Beispiel 3: der Thread ist schlau genug und muß das nicht alle 25ms tun
|
AW: Thread Synchronize Fragen
Mein Thread ist schlau genug :P er prüft vorher, ob sich die ProgressBar überhaupt bewegt hat :P ob es überhaupt etwas zu ändern gibt, indem ein paar Daten abgeglichen werden.
Zusätzlich habe noch so etwas drin
Delphi-Quellcode:
Ich komme jedenfalls gut klar mit den PostMessages. Ich finde es nun sauberer und perfomanter.
if (System.DateUtils.MilliSecondsBetween(Now, iCurrentTime) >= 500) then
begin // hier jetzt prüfen, ob ProgressBar überhaupt gesetzt werden muss iCurrentTime := Now; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:49 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-2025 by Thomas Breitkreuz