Forum: Cross-Platform-Entwicklung
Delphi
by himitsu,
17. Dez 2017
Jupp, finde ich auch.
Bei Synchronize passt sie ja, da es unglücklich wäre, wenn der Hauptthread auf sich selber wartet, bis er wieder Messages verarbeiten täte, da er dann ja ewig auf sich selber warten würde. :stupid:
Forum: Cross-Platform-Entwicklung
Delphi
by himitsu,
17. Dez 2017
Theorie laut Definition:
Jupp, Queue/ForceQueue in Warteschlange und sofort zurück
und Synchronize in Warteschlange und warten bis fertig.
Ausnahme in der Praxis:
Nur dass Queue im Haupthtread aufgerufen eben die selbe "Optimierung" wie Synchronize hat und dort Beide nicht in die Warteschlange gehen, sondern direkt ausgeführt werden.
Forum: Cross-Platform-Entwicklung
Delphi
by himitsu,
17. Dez 2017
Jupp.
Es ist einfacher sich auf einwas zu einigen, anstatt immer zu wechseln, so muß man nicht aufpassen was man wann nutzen muß.
In diesem Fall das, was immer und überall funktioniert.
Forum: Cross-Platform-Entwicklung
Delphi
by himitsu,
17. Dez 2017
Genau.
ForceQueue ist in Threads das Gleiche wie Queue.
Im Hauptthread aufgerufen arbeitet Queue aber "falsch".
Man dachte sich es zu optimieren, bzw. der Code für Queue wurde von Synchronize geklaut.
Wegen des potentiellen Deadlocks wird dort (im Synchronize) geprüft, ob es bereits im Hauptthread ist und dann direkt ausgeführt.
Mir wäre ja lieber gewesen sie reparieren Queue, anstatt 'ne...
Forum: Cross-Platform-Entwicklung
Delphi
by himitsu,
17. Dez 2017
Dass es teilweise funktioniert hatte, war praktisch nur ein Zufall.
Wenn es nur Aynchron, aber ebenfalls im Hauptthread laufen soll, dann nimm einfach TThread.Queue .
Das ist wie Synchronize, nur das Synchronize direkt ausgeführt und bis nach der Ausführung gewartet wird, und während Queue nur den Aufruf abschickt und direkt weitermacht.
ABER, aus den Hauptthread heraus arbeitet Queue wie...