Forum: GUI-Design mit VCL / FireMonkey / Common Controls
by Sir Rufo,
27. Nov 2010
Aus diesem Grund hänge ich die Instanz von TCriticalSection auch direkt an den Thread, um dessen Properties so zu schützen, dass kein gleichzeitiger Zugriff darauf erfolgen kann. Mittels Getter und Setter wird dann automatisch die CS betreten/verlassen. Somit wird der Zugriff auf selbige extrem stressfrei.
Wir sollten tatsächlich einen neuen Thread draus machen ...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
by Sir Rufo,
27. Nov 2010
Eine CriticalSection soll ja nur vor dem gleichzeitigen Lesen und Schreiben schützen.
Somit kommt es darauf an, was man schützen möchte, denn nur ein Thread kann die CriticalSection betreten. Alle anderen warten solange, bis die CriticalSection wieder betreten werden kann und dann geht wieder ein Thread in diese CriticalSection.
Somit kann man mit einer CriticalSection auch einen/mehrere...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
by Sir Rufo,
27. Nov 2010
Jo, aber die ist doch eindeutig für das Objekt? oder ich verstehe deine Frage nicht :gruebel:
Und ich verstehe auch nicht warum es einmalig sein muss?
Ich kann so viele TCriticalSection-Instanzen wie ich möchte/benötige.
Manchmal kann es Sinn machen mehrere Instanzen zu benutzen.
Es geht ja nur darum (in einer MultiThread-Umgebung) einerseits die Zugriffe auf den Speicher zu regeln...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
by Sir Rufo,
27. Nov 2010
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...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
by Sir Rufo,
27. Nov 2010
Queue leistet im Prinzip das gleiche wie Synchronize mit einem entscheidenden Unterschied:
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...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
by Sir Rufo,
27. Nov 2010
Der Durchgriff vom Thread auf die visuellen Komponenten hat durchaus seine Tücken.
Der Hinweis im Quelltext (wenn man ein Thread-Objekt erstellt) alle Zugriffe auf die Oberfläche (HauptThread, bzw. einen anderen ThreadKontext) mittels Synchronize zu realisieren sollte man unbedingt beachten.
Allerdings muss gerade vor diesem Hintergrund folgendes beachten:
procedure TFooThread.Execute;...