Я работаю с потоками, и поэтому использую мьютексы для блокировки общих ресурсов. Основное использование блокировки - поместить ресурсы в блок блокировки / разблокировки.
procedure RefreshData;
begin
DataLock;
GetData;
GetSettings;
CheckValues;
...
DataUnlock;
end;
Поскольку всегда есть пара Lock / Unlock, я начал думать об упрощенном подходе блокировки / разблокировки, который автоматически разблокировал бы ресурсы, когда они больше не нужны.
Итак, моя идея заключалась в том, чтобы ввести новую процедуру, которая будет принимать в качестве входного параметра ссылку на прецедент. Это даст мне возможность использовать анонимный метод.
Код будет примерно таким:
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;
Есть ли смысл в таком подходе или есть лучшее или даже более простое решение?
Спасибо и привет.
nice approach
с интерфейсами. - person TLama   schedule 20.11.2014