System/Docu/ru/Services.odc

Services

DEFINITION Services;

	CONST
		immediately = -1; now = 0;
		resolution = 1000;

	TYPE
		Action = POINTER TO ABSTRACT RECORD
			(a: Action) Do-, NEW, ABSTRACT
		END;

	PROCEDURE DoLater (a: Action; notBefore: LONGINT);
	PROCEDURE RemoveAction (a: Action);
	PROCEDURE Ticks (): LONGINT;
	PROCEDURE GetTypeName (IN rec: ANYREC; OUT type: ARRAY OF CHAR);
	PROCEDURE SameType (IN ra, rb: ANYREC): BOOLEAN;
	PROCEDURE IsExtensionOf (IN ra, rb: ANYREC): BOOLEAN;
	PROCEDURE Is (IN rec: ANYREC; IN type: ARRAY OF CHAR): BOOLEAN;
	PROCEDURE Extends (IN type, base: ARRAY OF CHAR): BOOLEAN;
	PROCEDURE Level (IN type: ARRAY OF CHAR): INTEGER;
	PROCEDURE TypeLevel (IN rec: ANYREC): INTEGER;
	PROCEDURE AdrOf (IN rec: ANYREC): INTEGER;
	PROCEDURE Collect;

END Services.


Модуль предоставляет несколько низкоуровневых служб. В настоящий момент предоставлены только служба времени,  служба фоновой обработки и служба рефлексии.
Действия представляют собой объекты, имеющие процедуру Do, которая вызывается отложенным образом, во время простоя системы. Действие, которое переустанавливает себя всякий раз, когда оно выполняется, работает как невытесняющая фоновая задача.
Служба рефлексии, в отличие от модуля Meta, работает только для записей, и также применима ко временным переменным в стеке ( в то время как Meta обычно распознает долгоживущие переменные).

Примеры:
ObxActionsdocu
ObxCubesdocu


CONST immediately
Это значение может быть передано в DoLater параметром notBefore, если действие должно быть выполнено как часть команды, выполняющейся в настоящий момент.

CONST now
Это значение может быть передано в DoLater параметром notBefore, если действие должно быть выполнено как можно быстрее после текущей выполняемой команды.

CONST resolution
Временное разрешение в тактах каждую секунду. Текущее время может быть запрошено процедурой Ticks.


TYPE Action
ABSTRACT
Действия - это объекты, процедуры Do которых вызываются отложенным образом, когда система вновь простаивает.

PROCEDURE (a: Action) Do-
NEW, ABSTRACT
Для регистрированного действия a будет рано или поздно вызвано a.Do, в зависимости от того, как оно было зарегистрировано (см. DoLater).


PROCEDURE DoLater (a: Action; notBefore: LONGINT)
Регистрирует действие. Его процедура Do будет выполнена единожды, когда придет подходящее время. a.Do будет вызвано когда-либо после Ticks(), достигшего notBefore, или если notBefore = now. Если процедура Do должна быть выполнена более одного раза, она может вызвать DoLater для переустановки самой себя. Конкретное действие может быть регистрировано лишь один раз, дополнительные обращения не будут иметь эффекта.

Предусловие
a # NIL	20

PROCEDURE RemoveAction (a: Action)
Удаляет регистрированное действие. Если действие a не регистрировано или NIL, ничего не происходит.

PROCEDURE Ticks (): LONGINT
Возвращает текущее время в тактах часов. Эти такты имеют разрешение resolution, т.е. resolution тактов каждую секунду.

PROCEDURE GetTypeName (IN rec: ANYREC; OUT type: ARRAY OF CHAR)
Возвращает имя типа записи, в форме "модуль.тип". Если передается указатель, возвращается тип его записи. Если запись безымянная, возвращается имя типа указателя, например, "FormViews.StdView".

PROCEDURE SameType (IN ra, rb: ANYREC): BOOLEAN
Определяет, когда две переменных-записи имеют полностью одинаковый тип.

PROCEDURE IsExtensionOf (IN ra, rb: ANYREC): BOOLEAN
Определяет, когда тип записи ra одинаков или является расширением типа rb.

PROCEDURE Is (IN rec: ANYREC; IN type: ARRAY OF CHAR): BOOLEAN
Определяет, когда тип записи rec одинаков или является расширением типа, заданного type (например, "FormViews.View"). Если тип type не найден, возвращается FALSE.

Предусловие
type # ""	20
type имеет вид"module.type"	21

PROCEDURE Extends (IN type, base: ARRAY OF CHAR): BOOLEAN
Определяет, когда тип записи type одинаков или является расширением типа base. Если тип type или base не найден, возвращается FALSE.

Предусловие
type # ""  &  base # ""	20
type и base имеют вид "module.type"	21

PROCEDURE Level (IN type: ARRAY OF CHAR): INTEGER
Определяет уровень расширения типа записи type. Заново произведенный тип имеет уровень 0. Если тип type не найден, возвращается -1.

Предусловие
type # ""	20
type имеет вид "module.type"	21

PROCEDURE TypeLevel (IN rec: ANYREC): INTEGER
Определяет уровень расширения типа переменной-записи rec. Заново произведенный тип имеет уровень 0.

PROCEDURE AdrOf (IN rec: ANYREC): INTEGER
Возвращает адрес переменной-записи.

PROCEDURE Collect
Запускает сборку мусора.