Description | Нужна возможность использовать глобальные переменные для доступа к ним из всех экземпляров скриптов. Так же, нужен глобальный лок, чтобы выполнять какую-то часть скрипта в один поток (выполнение http запроса и получение токена, версии и проч.).
Предлагаю реализовать вот такой интерфейс:
IPascalScriptGlobal = interface
procedure Lock;
procedure Unlock;
procedure LockRead;
procedure UnlockRead;
procedure SetVar(const AVarID: Integer; const AValue: Variant);
procedure SetVarTS(const AVarID: Integer; const AValue: Variant);
function GetVar(const AVarID: Integer): Variant;
function GetVarTS(const AVarID: Integer): Variant;
function Exists(const AVarID: Integer): Boolean;
function ExistsTS(const AVarID: Integer): Boolean;
end;
Функции с приставкой TS (ThreadSafe) должны сами обеспечивать потокобезопасность. Для использования функций без этой приставки, юзеру надо предварительно вызывать Lock функции. |