![]() Проекты на Аде Уроки Ады Документация Конференции Разработки Примеры SSqrt asynch_transfer entry_family finalizer Каталог ПО Полезные ссылки Поиск в Сети Скачать Прочее |
Асинхронная передача управленияПродемонстрируем одну из интересных возможностей языка - прерывание исполнения кода по истечению времени или по принятию рандеву задачи. В данном примере бесконечный цикл с подсчетом итераций прерывается по истечении одной секунды. Хотя эта возможность предоставляется языком, пользоваться ею следует с осторожностью, т.к. после прерывания исполнения данные могут оказаться в рассогласованном состоянии.
-- Asynchronous Transfer of Control example.
-- Author: Dmitriy Anisimkov.
-- License: GPL
--
-- Use -gnatP switch in GNAT for Win32.
with Ada.Text_IO;
with System;
procedure Asynch_Transfer is
type Modular_Type is mod 2 ** System.Word_Size;
N : Modular_Type := 0;
pragma Atomic (N);
begin
select
delay 1.0; -- Could be entry call.
Ada.Text_IO.Put_Line (Modular_Type'Image (N));
then abort
loop
N := N + 1;
end loop;
end select;
Ada.Text_IO.Put_Line ("Done.");
end Asynch_Transfer;
|
|