Einzelnen Beitrag anzeigen

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