Spec-Zone.ru › Ada 2005
Справочное руководство Ada 2005

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.
ПРИМЕЧАНИЯ
42 Обработчик Timer_Handler может быть связан с несколькими объектами Timer.





Spec-Zone.ru

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