16. Resources in the OpenSCADA system (Res, ResAlloc, AutoHD)
Most of the units and subsystems of the OpenSCADA are dynamic, ie they allow the creation/deletion/configuration while the system is working. Taking into account the multi-threading of the system, this functionality imposes stringent requirements for synchronization of threads. For synchronization in the system the resources are used, functions of which are localized in the objects <Res> and <ResAlloc>. Object <Res> provides storage of the resource, providing the functions of capture/release for the read and write. In object <ResAlloc> the automatic release of the resource functions are implemented. Automatic resource involves the creation of a local resource object with its automatic release at fracture (in the destructor). Using of automatic resource makes the work with resources when using the exceptions much easier.
Any dynamic system object is inherited from TCntrNode object, which contains a mechanism to connect via the AutoHD template. The main function of the template is to store the link to the object and the capture of the resource, excluding the deleting of the object at the time of use. Template supports copying the resource and its release in case of destruction of the template object. For clarity of the access to the objects generated by TCntrNode the AutoHD template supports casting, based on the dynamic cast.
16.1. Resource object (Res)
Public methods:
- Res( ); -- Инициализация ресурса.
- static void resRequestW( long tm = 0 ); -- Запрос ресурса на запись/модификацию.
- static void resRequestR( long tm = 0 ); -- Запрос ресурса на чтение.
- static void resRelease( ); -- Освобождение ресурса.
16.2. Объект ресурса (ResAlloc)
Публичные методы:
- ResAlloc( Res &rid ); -- Инициализация автоматически освобождающегося ресурса для ранее выделенного идентификатора <rid>.
- ResAlloc( Res &rid, bool write, long tm = 0 ); -- Инициализация автоматически освобождающегося ресурса для ранее выделенного идентификатора <rid>. С указанием типа ресурса <write> (чтение/запись).
- void request( bool write = false, long tm = 0 ); -- Запрос ресурса в указанном режиме <write> (чтение/запись).
- void release( ); -- Освобождение ресурса.
16.3. Шаблон (AutoHD)
Публичные методы:
- AutoHD( ); -- Инициализация без привязки к объекту.
- AutoHD( ORes *node, const string &who = "" ); -- Инициализация с привязкой к объекту <node>. Объект должен содержать функцию AHDConnect() и AHDDisConnect().
- AutoHD( const AutoHD &hd ); -- Копирующий конструктор.
- template <class ORes1> AutoHD( const AutoHD<ORes1> &hd_s, bool nosafe = false ); -- Конструктор приведения типов в безопасном или прямом режиме приведения <nosafe>.
- ORes &at( ) const; -- Получение объекта за ресурсом.
- void operator=( const AutoHD &hd ); -- Копирование ресурсов.
- void free( ); -- Освобождение ресурса.
- bool freeStat( ) const; -- Признак «Ресурс свободен».
16.4. Объект строки с доступом разделённым ресурсом (ResString)
Публичные методы:
- ResString( const string &vl = "" ); -- Инициализация строки с указанным значением <vl>.
- void setVal( const string &vl ); -- Установка значения строки в <vl>.
- const string &getVal( ); -- Получение значения строки.
Публичные атрибуты:
- res -- Ресурс строки.
- str -- Строка.