Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
7. Nov 2017
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.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
6. Nov 2017
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.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
6. Nov 2017
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...
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
6. Nov 2017
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.
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
3. Nov 2017
So wie ich Bernhard verstanden habe, erfordert WM_COPYDATA zwangsweise SendMessage.
Wie gesagt: Nimm einfach TThread.Queue :)
Forum: Algorithmen, Datenstrukturen und Klassendesign
by Zacherl,
3. Nov 2017
Das ist auch definitiv gut :thumb: Ich bezog mich eher darauf, dass du manchmal recht geschickt bist, die Delphi eigenen Funktionen durch Eigenentwicklungen ersetzen zu wollen :-D