Hallo,
vielen Dank für eure Antworten, durch eine Erkältung komm ich erst jetzt wieder zur Sache.
Habe mich nun was die kritischen Bereiche betrifft versucht kundig zu machen.
Mit einem kritischen Bereich schütze ich Speicherbereiche.
Wenn ich nun eine Property damit schützen möchte, so muss ich die Methode für den kritischen Bereich in die Lese- und in die Schreibmethode der Property packen?
Delphi-Quellcode:
function ThreadValue.getNO2_10: Double;
begin
try
CSNO2_10.Acquire; // lock out other threads
Result := FNO2_10;
finally
CSNO2_10.Release;
end;
end;
Delphi-Quellcode:
procedure ThreadValue.setNO2_10(const Value: Double);
begin
try
CSNO2_10.Acquire; // lock out other threads
FNO2_10 := Value;
finally
CSNO2_10.Release;
end;
end;
So habe ich die Kritischen Bereiche definiert:
Delphi-Quellcode:
type
ThreadValue = class(TThread)
private
{ Private-Deklarationen }
CSNO2_10: TCriticalSection;
CSNO2_06: TCriticalSection;
CSCompAir: TCriticalSection;
CSCoolant: TCriticalSection;
Delphi-Quellcode:
{ ThreadGetValue }
procedure ThreadValue.Execute;
begin
CSNO2_10 := TCriticalSection.Create;
CSNO2_06 := TCriticalSection.Create;
CSCompAir := TCriticalSection.Create;
CSCoolant := TCriticalSection.Create;
Wenn ich nun mit meinem anderen Thread
Delphi-Quellcode:
type
ThreadTCP = class(TThread)
private
{ Private-Deklarationen }
media: ThreadValue;
Versuche eine der Propertys aus zu lesen:
Self.FNO2_10 := media.NO2_10;
so sehe ich, beim debuggen, dass die Methode
CSNO2_10.Acquire; // lock out other threads
Immer einen Fehler verursacht und dadurch nie ein Wert gelesen werden kann.
Ich bin davon ausgegangen, dass mir eine lokale CriticalSection genügt, wenn diese in der "set" und "get" Methode eingebunden ist.
Vielen Dank für die weitere Hilfe runter vom Holzweg