Spec-Zone.ru › Ada 2012
Справочник Ada 2012

D.14.1 Таймеры времени выполнения

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

Статическая семантика

Существует следующий определяемый языком библиотечный пакет:
with System;
package Ada.Execution_Time.Timers is
type Timer (T : not null access constant
Ada.Task_Identification.Task_Id) is
tagged limited private;
type Timer_Handler is
access protected procedure (TM : in out Timer);
Min_Handler_Ceiling : constant System.Any_Priority :=
определяется реализацией;
procedure Set_Handler (TM : in out Timer;
In_Time : in Time_Span;
Handler : in Timer_Handler);
procedure Set_Handler (TM : in out Timer;
At_Time : in CPU_Time;
Handler : in Timer_Handler);
function Current_Handler (TM : Timer) return Timer_Handler;
procedure Cancel_Handler (TM : in out Timer;
Cancelled : out Boolean);
function Time_Remaining (TM : Timer) return Time_Span;
Timer_Resource_Error : exception;
private
... -- не определено языком
end Ada.Execution_Time.Timers;
Тип Timer представляет событие времени выполнения для одной задачи и способен обнаруживать переполнение времени выполнения. Дискриминант доступа T идентифицирует соответствующую задачу. Тип Timer требует финализации (см. 7.6).
Объект типа Timer называется установленным, если он связан с ненулевым значением типа Timer_Handler, и очищенным в противном случае. Все объекты типа Timer изначально очищены.
Тип Timer_Handler идентифицирует защищенную процедуру, которая должна быть выполнена реализацией при истечении таймера. Такая защищенная процедура называется обработчиком.

Динамическая семантика

При создании объекта Timer или при первом вызове процедуры Set_Handler с таймером в качестве параметра, ресурсы, необходимые для работы таймера времени выполнения на основе связанных часов времени выполнения, выделяется и инициализируются. Если эта операция превысит доступные ресурсы, возникает Timer_Resource_Error.
Процедуры Set_Handler связывают обработчик Handler с таймером TM: если Handler равен null, таймер очищается; в противном случае, он устанавливается. Первая процедура Set_Handler загружает таймер TM с интервалом, указанным параметром Time_Span. В этом режиме таймер TM истекает, когда время выполнения задачи, идентифицированной TM.T.all, увеличивается на In_Time; если In_Time меньше или равно нулю, таймер истекает немедленно. Вторая процедура Set_Handler загружает таймер TM с абсолютным значением, указанным параметром At_Time. В этом режиме таймер TM истекает, когда время выполнения задачи, идентифицированной TM.T.all, достигает At_Time; если значение At_Time уже достигнуто при вызове Set_Handler, таймер истекает немедленно.
Вызов процедуры Set_Handler для таймера, который уже установлен, заменяет обработчик и (абсолютное или относительное) время выполнения; если Handler не равен null, таймер остается установленным.
При истечении таймера вызывается связанный обработчик, передавая таймер в качестве параметра. Первым действием выполнения обработчика является очистка события.
Функция Current_Handler возвращает обработчик, связанный с таймером TM, если этот таймер установлен; в противном случае возвращает null.
Процедура Cancel_Handler очищает таймер, если он установлен. Cancelled получает значение True, если таймер был установлен перед его очисткой; в противном случае получает значение False.
Функция Time_Remaining возвращает интервал времени выполнения, оставшийся до истечения таймера TM, если этот таймер установлен; в противном случае возвращает Time_Span_Zero.
Константа Min_Handler_Ceiling — это минимальный приоритет потолка, требуемый для защищенного объекта с обработчиком, чтобы гарантировать отсутствие нарушения потолка при вызове этого обработчика.
В рамках финализации объекта типа Timer таймер очищается.
Для всех подпрограмм, определенных в этом пакете, Tasking_Error возникает, если задача, идентифицированная TM.T.all, завершила свою работу, а Program_Error возникает, если значение TM.T.all равно Task_Identification.Null_Task_Id.
Исключение, распространяемое от обработчика, вызванного в рамках истечения таймера, не оказывает никакого эффекта.

Ошибка выполнения

При вызове любой из подпрограмм, определенных в этом пакете, если задача, идентифицированная TM.T.all, больше не существует, выполнение программы является ошибочным.

Требования к реализации

Для данного объекта Timer реализация должна выполнять объявленные в этом пакете операции атомарно по отношению к любым из этих операций над тем же объектом Timer. Замена обработчика вызовом Set_Handler должна выполняться атомарно относительно выполнения обработчика.
При финализации объекта типа Timer системные ресурсы, используемые таймером, должны быть освобождены.

Разрешения реализации

Реализации могут ограничить количество таймеров, которые могут быть определены для каждой задачи. Если это ограничение превышено, возникает Timer_Resource_Error.
ПРИМЕЧАНИЯ
45 Обработчик Timer_Handler может быть связан с несколькими объектами Timer.


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API