![]() |
AW: verhindern: Klick auf Titelleiste stoppt Programm
![]() ![]() Synchronize( AMethod ) arbeitet die Methode in einem synchronisiertem Kontext ab (klar, das wissen wir alle). Wenn in dieser Methode jetzt eine Wahnsinns-Berechnung durchgeführt wird, die z.B. so 10 Sekunden dauert, dann wird auch der Thread (aus dem Synchronize aufgerufen wurde) für genau diese 10 Sekunden quasi unterbrochen. Queue( AMethod ) übergibt das (intern) an eine MessageQueue und der HauptThread arbeitet diese ab, wenn er dafür Zeit hat. Der Thread läuft aber direkt danach weiter und wird nicht durch die lange Abarbeitung unterbrochen. Somit hat Synchronize ein blockierendes und Queue eine nicht blockierendes Verhalten. Ansonsten sind die gleich Zitat:
|
AW: verhindern: Klick auf Titelleiste stoppt Programm
Bitte Bitte sag mir dass es das auch bei Delphi 2007 schon gibt.
Kanns leider hier zu Hause nicht überprüfen. |
AW: verhindern: Klick auf Titelleiste stoppt Programm
Ab welcher Delphi Version gibt es die Methode Queue von TThread?
|
AW: verhindern: Klick auf Titelleiste stoppt Programm
Zitat:
Gibts die bei Deiner? (Dann hab ich die auch. Hechel) |
AW: verhindern: Klick auf Titelleiste stoppt Programm
Kann ich im Moment nicht nach gucken, da ich ihr auf dem Netbook nur Delphi 7 installiert habe.
Nachtrag: Unter D7 gibt es die Methode noch nicht. |
AW: verhindern: Klick auf Titelleiste stoppt Programm
Liste der Anhänge anzeigen (Anzahl: 3)
Gute Frage ... bei D2010 gibt es die auf jeden Fall
Im Anhang mal ein kleines Test-Projekt wo man den Unterschied zwischen Queue und Synchronize sehen kann. In der Listbox wird jeweils der Erstellungszeitpunkt im Thread und der Zeitpunkt der Anzeige geschrieben. Nach jeder Anzeige schläft der HauptThread 500ms (um eine zeitraubende Bearbeitung zu simulieren) Bei Synchronize sind beide Zeiten gleich, bei Queue sind diese unterschiedlich. (exe + src included) (äh, der Source ist nur so hingeklatscht ... also bitte keine Kommentare wegen dem Stil :mrgreen: ) |
AW: verhindern: Klick auf Titelleiste stoppt Programm
Puhh..
Was hab ich mir eigene ThreadPools gebaut genau für diesen Zweck. Ich hoffe doch sehr dass mich am Montag diese Methode aus D2007 anspringt! Danke. Man lernt immer wieder dazu. (bzw. endeckt Features von denen man nur zu träumen wagte) |
AW: verhindern: Klick auf Titelleiste stoppt Programm
Moment, ThreadPools sind was anderes. ThreadPolls verwalten mehrere WorkerThreads. Wie unser Adel schon geschrieben hat ist die Methode Queue die non-blocking Version von Synchronize.
|
AW: verhindern: Klick auf Titelleiste stoppt Programm
@Sir Rufo
es gibt da eine Stelle in Deinem Code, mit dem ich nicht klar komme:
Delphi-Quellcode:
constructor TWorkThread.Create( CreateSuspended : Boolean );
begin FCS := TCriticalSection.Create; ich war bisher davon ausgegangen dass diese Section ein eindeutiger, einmaliger Abschnitt sein muss. |
AW: verhindern: Klick auf Titelleiste stoppt Programm
Es kommt speziell darauf an was du in der Oberfläche aktualisieren willst. Willst du nur eine Progressbar aktualisieren wäre eine Variante den aktuellen Fortschritt in einer Variablen abzulegen und per Timer dann diesen Status in regelmäßigen Abständen abfragen. Oder anstelle von syncronize einfach Nachrichten posten (mit Postmessage). Aber es kommt immer darauf an was genau man machen will um zu schauen welche Methode die beste ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:12 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