AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TParallel : "Kein Eigentümer der Objektsperre"

Ein Thema von Harry Stahl · begonnen am 22. Nov 2014 · letzter Beitrag vom 21. Feb 2019
Antwort Antwort
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#1

TParallel : "Kein Eigentümer der Objektsperre"

  Alt 22. Nov 2014, 17:39
Habe nun bestimmte Rechenoperationen für Bitmaps mit TParallel.Task gelöst.

Bei Zeichenaktionen (z.B. mit einem Werkzeug über eine Grafik malen) kommt dann hin und wieder die Meldung:

"Kein Eigentümer der Objektsperre".

Nehme mal an, dass irgendwo ein Zeichenevent ausgelöst wird, während eines der zu zeichnenden Bitmaps in der TParallel.Tasks berechnet wird.

Wie löst man das am Besten:

Ein Lock vor der TParallel-Berechnung auf das Bitmap setzen und hinterher wieder freigeben und dann bei allen Zeichenaktionen prüfen, ob ein Lock auf dem Bitmap ist und z.B. so lange warten, bis das wieder frei ist?
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#2

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 22. Nov 2014, 17:52
Vielleicht auf einer Kopie der Bitmap arbeiten und am Ende die Instanzen austauschen?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 22. Nov 2014, 19:06
Wie tauscht man denn bei Bitmaps richtigerweise die Instanzen aus?

Temporäres Bitmap erzeugen, Original zuweisen, mit Temp-Bit arbeiten, am Ende wieder dem Original das Tempbit zuweisen?

Delphi-Quellcode:
  BitUnten := Tbitmap.Create;
  BitUnten.Assign (BitUntenA);

  // mit BitUnten arbeiten
  BitUntenA.Assign(BitUnten);
  BitUnten.Free;
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 22. Nov 2014, 19:22
Habe nun bestimmte Rechenoperationen für Bitmaps mit TParallel.Task gelöst.

Bei Zeichenaktionen (z.B. mit einem Werkzeug über eine Grafik malen) kommt dann hin und wieder die Meldung:

"Kein Eigentümer der Objektsperre".
Zeichnen? Ich hoffe doch nicht über die WinAPI? Das eigentliche Problem das die VCL nicht Threadsafe ist, ist das die GDI/Fenster-Handels Thread-Affin sind. D.h. das sie nur im erzeugenden Thread.
gültig sind.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.453 Beiträge
 
Delphi 12 Athens
 
#5

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 22. Nov 2014, 19:29
Wie tauscht man denn bei Bitmaps richtigerweise die Instanzen aus?
So geht's etwas schneller:
Delphi-Quellcode:
  BitUnten := Tbitmap.Create;
  BitUnten.Assign (BitUntenA);

  // mit BitUnten arbeiten
  BitUntenA.Free;
  BitUntenA := BitUnten;
[/QUOTE]
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 22. Nov 2014, 19:37
Also, es geht um diese Situation (vgl. auch anliegenden Screenshot):

Habe ein Bild, das aus mehreren Ebenen besteht. Das berechnete Ergebnis wird auf den Canvas einer Paintbox ausgegeben.

Nun kann man mit dem Zeichenstift über das Bild malen. Ich prüfe währenddessen, welche in welchem Bereich gemalt wird, übertrage diese Zeichenaktion auf den Ausschnitt der gerade bemalten Ebene und berechne alles neu und zeige es wieder auf dem Canvas der Paintbox an.

Anscheinend findet irgendwo ändern des Bitmaps und zeichnen des Bitmaps gleichzeitig statt.

Bislang hatte ich damit keine Probleme, aber wenn ich mit TParallel mehrere Tasks verwende und den geänderten Bereich der Ebenen-Bitmap aktualisiere, kommt hin und wieder diese Fehlermeldung.
Miniaturansicht angehängter Grafiken
aktion.jpg  
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.143 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 23. Nov 2014, 11:10
Anscheinend findet irgendwo ändern des Bitmaps und zeichnen des Bitmaps gleichzeitig statt.
Da arbeitest aber nicht auf der Bitmap die zum Anzeigen verwendet wird, oder?
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.196 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 23. Nov 2014, 11:20
Anscheinend findet irgendwo ändern des Bitmaps und zeichnen des Bitmaps gleichzeitig statt.
Da arbeitest aber nicht auf der Bitmap die zum Anzeigen verwendet wird, oder?
Das habe ich schon mit http://www.delphipraxis.net/1280778-post4.html gefragt.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von Harry Stahl
Harry Stahl

Registriert seit: 2. Apr 2004
Ort: Bonn
2.533 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 25. Nov 2014, 00:32
In gewisser Hinsicht kann das passieren, dass das Bitmap vom Anwender bearbeitet wird, gleichzeitig aber bestimmte Bearbeitungsprozesse damit parallel passieren (z.B. erkennen, welche Bereiche geändert wurden und diese dann in eine Redo/Undo Sicherung geschrieben werden).

Daher wäre hier die Frage, wie man den Zugriff auf das Bitmap am besten schützt (evtl. mit Lock?), bzw. prüft, ob das gerade irgendwie in der Verwendung ist.
  Mit Zitat antworten Zitat
thesakal

Registriert seit: 17. Mai 2009
Ort: Herford
2 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: TParallel : "Kein Eigentümer der Objektsperre"

  Alt 21. Feb 2019, 00:23
Kein Eigentümer der Objektsperre : Wenn man nicht bestimmen Height und Width von Bitmap before 'beginscene', es passiert diese Meldung.
Muharrem Sakal
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz