AGB  ·  Datenschutz  ·  Impressum  







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

Analyse : object locked error

Ein Thema von bernhard_LA · begonnen am 24. Nov 2020 · letzter Beitrag vom 29. Nov 2020
Antwort Antwort
bernhard_LA
Online

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#1

Analyse : object locked error

  Alt 24. Nov 2020, 15:49
der Demo-code funktioniert fehlerfrei ....
allerdings wenn ich die Funktion DoPaintTest(var PaintBMP: TBitmap); in eine
andere Klasse kopiere liefert diese Funktione den object locked error .... (siehe screen dump)
wie kann das sein, es gibt doch überhaupt keine Interaction mit der Klasse ??????




Delphi-Quellcode:
type TPaintLayout2 = class
          procedure DoPaintTest(var PaintBMP: TBitmap);
end;



procedure TPaintLayout2.DoPaintTest(var PaintBMP: TBitmap);
var
  p1, p2: TPointF;
  i, j: Integer;
  Brush: TStrokeBrush;

begin

  PaintBMP.Width := 1000;
  PaintBMP.Height := 1000;

  for i := 1 to 100 do
  begin

    Brush := TStrokeBrush.Create(TBrushKind.Solid, randomColor);
    Brush.Thickness := 2;
    // Brush.Kind := Solid;
    p1 := TPointF.Create(2, 2);
    p2 := TPointF.Create(Random(400), Random(400));

    PaintBMP.Canvas.BeginScene;

    // draw lines on the canvas

    PaintBMP.Canvas.DrawLine(p1, p2, 1, Brush);

    PaintBMP.Canvas.EndScene; // in dieser Zeile kommt es zum Object lock error

    Brush.Free;

  end

end;

///
/// somewhere inside the main app
///
.......


var
  aPaintLayoutCTRL: TPaintLayout2;
  aBMP: TBitmap;
begin
  aBMP := TBitmap.Create;
  aPaintLayoutCTRL := TPaintLayout2.Create;
  try
    aPaintLayoutCTRL.DoPaintTest(aBMP);

    imgviewer_layout.Bitmap.Assign(aBMP) ;

  finally
    aPaintLayoutCTRL.Free;
    aBMP.Free;
  end;
Miniaturansicht angehängter Grafiken
object_locked.png  

Geändert von bernhard_LA (24. Nov 2020 um 15:53 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Analyse : object locked error

  Alt 24. Nov 2020, 17:02

Die Glaskugel sagt: "Es fehlt das gezippte und in sich vollständige Minimal-Beispiel-Projekt."
  Mit Zitat antworten Zitat
bernhard_LA
Online

Registriert seit: 8. Jun 2009
Ort: Bayern
1.138 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Analyse : object locked error

  Alt 24. Nov 2020, 18:08
minimal Projekt wäre der code oben ... funktioniert ja einwandfrei ,
die echte Klasse kann ich leider nicht "public posten" , aber der test code - die Funktion DoPaintTest(aBMP) ; ist identisch in beiden Klassen.
Es gibt keine Variable die auf etwas in der Klasse zugreift .

Wie kann ich diesen Fehler verstehen oder debuggen ??


Was ich hierzu gefunden habe

https://stackoverflow.com/questions/...onpaint-method

Geändert von bernhard_LA (24. Nov 2020 um 18:32 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Analyse : object locked error

  Alt 27. Nov 2020, 11:33
Hast du denn die Antworten und vor allen Kommentare gelesen und verstanden?
Was sind deine Schlüsse und Maßnahmen daraus?

Debuggst du mit Debug-DCUs?
So dass du im Falle von object locked error einfach mal auf Break klicken kannst und anhand des Callstacks siehst, wer oder was unberechtigterweise auf das gelockte TMonitor-Objekt zugreift?
Hast du dir mal die Threads ausgeloggt, die darauf zugreifen?
Ich nehme mal an, du bist unter Linux?
Unter Windows würde ich jetzt ganz simpel in die erste Zeile von DoPaintTest sowas schreiben OutputDebugString(PChar(TThread.Current.ThreadID.ToHexString));
Da musst du dir mal das Gegenstück für Linux suchen.

Ansonsten ist dein Code halt suboptimal, probiere es doch mal so:
Delphi-Quellcode:
procedure TPaintLayout2.DoPaintTest(var PaintBMP: TBitmap);
var
  p1, p2: TPointF;
  i, j: Integer;
  Brush: TStrokeBrush;
begin

  PaintBMP.Width := 1000;
  PaintBMP.Height := 1000;

  Brush := TStrokeBrush.Create(TBrushKind.Solid, randomColor);
  try
    Brush.Thickness := 2;
    p1 := TPointF.Create(2, 2);

    if PaintBMP.Canvas.BeginScene then
    begin
      for i := 1 to 100 do
      begin
        Brush.Color := randomColor;
        p2 := TPointF.Create(Random(400), Random(400));
        PaintBMP.Canvas.DrawLine(p1, p2, 1, Brush);
      end;
      PaintBMP.Canvas.EndScene;
    end;
  finally
    Brush.Free;
  end;
end;
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.942 Beiträge
 
Delphi 12 Athens
 
#5

AW: Analyse : object locked error

  Alt 29. Nov 2020, 20:19
In FMX gibt's in FMX.Types log.d('Meine Meldung') zum Ausgeben von Logmeldungen.
  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 12:34 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