Variabel vor gleichzeitigem Zugriff schützen
Verfasst: 4. Juli 2009 19:31
Hallo,
ich habe das Problem, dass ich eine Variable vor gleichzeitigem Zugriff schützen muss.
Jetzt greife ich über eine Funktion auf die Funktion setImage zu. Da meine Funktion durch einen Funktionspointer an einen Thread übergeben wurde, kann es nun passieren, dass meine Funktion neuen speicher alloziiert und dann mit der Funktion setImage die Adresse übergibt.
Gleichzeitig versucht aber die paintEvent Funktion auf die Adresse zuzugreifen, um as Bild neu zu zeichnen. Dadurch das ich die Funktion update nicht steuern kann, wann sie aufgerufen wird, kann es vorkommen, dass der Speicher für das Bild bereits frei gegeben ist, bevor ich es in der paintEvent-Funktion gezeichnet habe.
Ein löschen in der paintEvent Funktion funktioniert auch nicht, da es passieren kann, dass mein Zeiger überschrieben wird, und ich somit den Speicher nicht mehr frei geben kann.
Ich habe da mal was von mutex gehört, habe aber keine Ahnung wie ich die an dieser Stelle einsetzten könnte, da ich ja eine Variable an zwei stellen schützen muss.
Bin total verzweifelt und für jede Hilfe dankbar.
bp
ich habe das Problem, dass ich eine Variable vor gleichzeitigem Zugriff schützen muss.
Code: Alles auswählen
class fo
{
public:
void setImage(QImage *image);
protected:
void paintEvent(QPaintEvent *event);
private:
QImage *m_pImage;
}
Gleichzeitig versucht aber die paintEvent Funktion auf die Adresse zuzugreifen, um as Bild neu zu zeichnen. Dadurch das ich die Funktion update nicht steuern kann, wann sie aufgerufen wird, kann es vorkommen, dass der Speicher für das Bild bereits frei gegeben ist, bevor ich es in der paintEvent-Funktion gezeichnet habe.
Ein löschen in der paintEvent Funktion funktioniert auch nicht, da es passieren kann, dass mein Zeiger überschrieben wird, und ich somit den Speicher nicht mehr frei geben kann.
Code: Alles auswählen
class fo *f;
void update()
{
if(image != NULL) delete image;
image = new QImage(...);
f->setImage(image);
f->update();
}
Bin total verzweifelt und für jede Hilfe dankbar.
bp