Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Apollonius,
9. Jul 2008
Ja, wenn die Threads warten, ist das klar. Ich ging allerdings davon aus, dass die Bilder bereits im Speicher vorliegen und nur noch ein Verkleinerungsalgorithmus durchgeführt werden muss. Andernfalls hast du natürlich recht, Alzaimar.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Apollonius,
9. Jul 2008
Ja. Du hast zwei Listen, eine für die fertigen Aufträge und eine für die noch ausstehenden. Jeder Auftrag wird durch eine Objektinstanz repräsentiert, die die Bilder, eventuell andere Einstellungen und das fertige Thumbnail (das ist natürlich nur in der Liste der fertigen Aufträge zugewiesen) enthält.
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Apollonius,
9. Jul 2008
Das wäre das Effektivste. Du kannst natürlich auch eine TObjectQueue mit einer Critical Section oder was auch immer verwenden, aber der große Vorteil von verketteten Listen ist, dass du kein Synchronisations-Objekt benötigst. Allerdings ist die Implementierung nicht ganz trivial, du brauchst die Interlocked-Funktionen. Windows bietet aber entsprechende Funktionen an; es handelt sich zwar um einen...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Apollonius,
9. Jul 2008
Das sollte kein riesiges Problem darstellen. TThread bietet die Möglichkeit, dem Hauptthread Arbeiten zuzuteilen, und zwar nicht blockierend wie bei Synchronize (Klassenmethode Queue). Da könntest du dann einfach immer ein Aktualisierungsroutine angeben. Am besten führst du einfach eine globale boolsche Variable ein: Sie hat den Status False, wenn die Routine gerade nicht in der Warteschlange...
Forum: GUI-Design mit VCL / FireMonkey / Common Controls
Delphi
by Apollonius,
9. Jul 2008
Du solltest nicht viel mehr Threads erstellen als CPU-Kerne vorhanden sind (wobei Hyperthreading-Kerne mehrfach gezählt werden sollten, aber das ist nicht so wichtig). Sonst gibt es nämlich nur mehr Overhead.
Du könntest das Ganze gut mit einer Auftragsliste implementieren: Jedes zu bearbeitende Bild ist ein Auftrag. Wenn du die noch ausstehenden und beendeten Aufträge in einer Linked List...