Jepp, aber hier kommen wir wieder zu dem Punkt daß die Abfrage sich nicht für Deine lokalen CS interessiert.
wenn Du nochmals mein Beispiel aus
http://www.delphipraxis.net/156304-v...ml#post1064523
#26 heranziehst
Meine Vorstellung einer CS basiert darauf daß ein Codeabschnitt markiert Windows mitgeteilt wird. Wenn ein anderer Thread versucht diesen Codeabschnitt zu betreten wird dies nur ermöglicht wenn kein anderer Thread sich gerade darin aufhält. Wenn die Markierung jedes mal eine andere ist wie soll Windows hier eingreifen.
Wenn ich Speicherbereich A schützen möchte, dann nehme ich dafür ein CS mit Namen CSA.
Ich muss nun gewährleisten, dass bei jedem Zugriff auf den Speicherbereich A die CS CSA betreten und danach wieder verlassen wird.
Das ist erstmal alles.
Windows ist es egal, wieviele CS ich benutze.
Jede Instanz von einer Klasse/Thread belegt einen bestimmten Speicherbereich. Erzeuge ich mit der Klasse/Thread eine CS kann ich damit genau den Speicherbereich vom der Klassen-/Thread-Instanz schützen.
Meine Vorgehensweise ist nun, dass alles in der Klasse/Thread, auf das von außen zugegriffen wird von eben so einer CS geschützt wird.
Delphi-Quellcode:
TMyThread = class( TThread )
property Info : Int64 read GetInfo;
end;
function TMyThread.GetInfo : Int64;
begin
ThreadCS.Enter;
try
Result := FInfo;
finally
ThreadCS.Leave;
end;
end;
Wenn ich jetzt auf die Property Info von der Thread-Instanz zugreife, warum sollte die dann
nicht geschützt sein?
Es wird ein CS betreten, der Wert ausgelesen und die CS wieder verlassen.
Das diese CS-Instanz innerhalb der Thread-Instanz aufgehangen ist, ist völlig egal. Es ist eine CS.
Und schützen muss ich die mit einer CS, wenn ich den Wert der Property Info innerhalb von TMyThread.Execute beschreiben will
Delphi-Quellcode:
procedure TMyThread.Execute;
begin
ThreadCS.Enter;
try
FInfo := 20;
finally
ThreadCS.Leave;
end;
end;