Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Aus Threads erzeugte Klassen und Thread-Safety
HenryHux - Do 07.03.13 21:19
Titel: Aus Threads erzeugte Klassen und Thread-Safety
Hi,
ich habe wohl das Prinzip von Multithreading nicht ganz verstanden und wollte einmal hier nachfragen, wie das denn genau abläuft.
Und zwar habe ich aus verschiedenen Gründen in meinen Projekten auf die Thread-Safety achten müssen (zb. Arbeiten mit TBitmaps).
Habe auch die Synchronisation in der Thread-Klasse ganz gut hinbekommen, jetzt stoße ich aber auf Probleme, die ich nicht ganz zuordnen kann.
Und zwar starte ich mehrere Threads, die wiederum jeweils die gleiche Klasse instanzieren.
In dieser Klasse (abgeleitet von TObject und nicht TThread) werden Bitmaps erzeugt und verarbeitet.
Das klappt auch gut, ich bekomme jedoch sehr selten einen Fehler, wie "Bitmap ist ungültig". Leider kann ich die Fehler nicht reproduzieren, sondern sie treten anscheinend völlig zufällig auf und der Compiler zeigt mir auch keine genaue Fehlerstelle.
Durch Exception-Handling weiß ich jedoch, dass der Fehler in Prozessen auftritt, in denen mit diesen Bitmaps gearbeitet wird.
Da Bitmaps nicht threadsicher sind, wäre meine Frage jetzt, ob ich auch in Klassen die von Threads instanziert werden auf die Thread-Safety achten muss.
Vielen Dank,
lg
Gausi - Do 07.03.13 23:00
Wenn ein Thread ein Objekt erstellt, und dieses Objekt dann im Kontext des Threads auf Bitmaps rummalt, dann kann das in die Hose gehen. Abhilfe kann man afaik mit Canvas.Lock schaffen.
Generell gilt für alle Dinge, (und das fängt schon bei einfachen Integern an), dass man auf Thread-Sicherheit achten muss, wenn man Daten zwischen verschiedenen Threads austauscht (lesen/schreiben). Es muss immer sichergestellt sein (z.B. über CriticalSection), dass immer nur ein Thread gleichzeitig schreibend darauf zugreift. Gleichzeitiges Lesen ist in der Regel kein Problem (wenn nicht grade jemand anderes schreibt).
HenryHux - Fr 08.03.13 11:18
Vielen Dank,
ich habe es jetzt mit Canvas.Lock gemacht und noch keine Fehler bekommen.
Allerdings leidet die Performance wirklich..
Lg
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!