Продемонстрируем одну из интересных возможностей языка — прерывание исполнения кода по истечению времени или по принятию рандеву задачи. В данном примере бесконечный цикл с подсчетом итераций прерывается по истечении одной секунды. Хотя эта возможность предоставляется языком, пользоваться ею следует с осторожностью, т.к. после прерывания исполнения данные могут оказаться в рассогласованном состоянии.
-- 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;
----