Ich arbeite mit Threads und das ist der Grund, warum ich Mutexe zum Sperren freigegebener Ressourcen verwenden. Die grundlegende Verwendung von Sperren besteht darin, Ressourcen in Block sperren/entsperren zu setzen.Sperren und entsperren Ressourcen mit einem einzigen Befehl
procedure RefreshData;
begin
DataLock;
GetData;
GetSettings;
CheckValues;
...
DataUnlock;
end;
Da es immer ein Paar Sperren/Entsperren ist ich über vereinfachte Sperre begann zu denken/Entsperren Ansatz, die Ressourcen automatisch würde entsperren, wenn sie nicht mehr benötigt.
Also war meine Idee, eine neue Prozedur einzuführen, die als Eingabeparameter einen Verweis auf die Prozedur nehmen würde. Dies gibt mir die Möglichkeit, die anonyme Methode zu verwenden.
-Code wäre so etwas wie:
type TBaseProc = reference to procedure;
procedure TMyObject.LockMethod(AMeth: TBaseProc);
begin
DataLock;
try
AMeth;
finally
DataUnlock;
end;
end;
procedure TForm1.RefreshData;
begin
MyObject.LockMethod(
procedure
begin
GetData;
GetSettings;
CheckValues;
...
end;
);
end;
Dieser Ansatz hat einen Sinn oder ist es besser oder noch einfacher Lösung für dieses?
Dank und Grüße.
Mögen Sie die Leistung oder nicht? –
Die einfachste Lösung wäre, wenn der Compiler native Unterstützung für Lock() -Anweisung wie in C# hätte: http://msdn.microsoft.com/en-us/library/c5kehkcz.aspx. Persönlich verwende ich Code-Vorlagen zum Sperren/Entsperren von Paaren. –
@David: Ja, mir ist die Leistung wichtig. Gibt es eine Schätzung, wie viel Overhead diesen Ansatz verursachen könnte? Ich denke, Lock/Unlock-Paar ist immer noch besser Ansatz in Bezug auf die Leistung. – Nix