![]() |
Ist der Thread schuld?
Hi,
Delphi-Quellcode:
Während dieser Thread seine Arbeit verrichtet (Ist jetzt erstmal egal was er genau tut), taucht nach kurzer Zeit folgendes Phänomen auf:
procedure TCellThread.Execute;
begin repeat Synchronize(DoCalculate); Synchronize(FAutomaton.Paint); inc(FAutomaton.FGen); until Terminated; end; Ich erhalte bei einem einfachen Lesezugriff auf eine Variable eines Objekts eine Zugriffsverletzung: Zitat:
Sowas kann imo durch Threads passieren. Aber ich Synchronisiere doch alles. Warum passiert sowas? (es passiert übrigens auch wenn ich
Delphi-Quellcode:
auskommentiere.
inc(FAutomaton.FGen);
Gruß Neutral General |
Re: Ist der Thread schuld?
Von wo erfolgt dieser Zugriff und wie wird die Objektinstanz erhalten?
Nebenbei bemerkt: Ist dieser Thread nicht ziemlich sinnlos? Da du alles synchronisierst, wird alles im Hauptthread ausgeführt. |
Re: Ist der Thread schuld?
Hi,
Alsooo... Der Callstack:
Delphi-Quellcode:
Ich glaube die Zeile ausgemacht zu haben, an der es passiert:
TCellularAutomatonEx.SetWorld(0,2,$26FC63C)
TWatorObject.Move(???) TWatorSimulation.Calculate TCustomCellularAutomaton.DoOnCalculate(???) TCellThread.DoCalculate TCellThread.Execute TWatorObject.Move:
Delphi-Quellcode:
Setter:
// FWorld: Array of Array of Pointer;
FWorld[fy,fx] := Self;
Delphi-Quellcode:
Ehm... Ja warum ich das in nem Thread mache wenn ich eh alles Synchronisiere... Ehm keine Ahnung :oops:
procedure TCellularAutomatonEx.SetWorld(y, x: Integer;
const Value: Pointer); begin FEgal := 24; // <--- AV // ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz