c974001.a
来自「linux下编程用 编译软件」· A 代码 · 共 153 行
A
153 行
-- C974001.A------ Grant of Unlimited Rights---- Under contracts F33600-87-D-0337, F33600-84-D-0280, MDA903-79-C-0687,-- F08630-91-C-0015, and DCA100-97-D-0025, the U.S. Government obtained -- unlimited rights in the software and documentation contained herein.-- Unlimited rights are defined in DFAR 252.227-7013(a)(19). By making -- this public release, the Government intends to confer upon all -- recipients unlimited rights equal to those held by the Government. -- These rights include rights to use, duplicate, release or disclose the -- released technical data and computer software in whole or in part, in -- any manner and for any purpose whatsoever, and to have or permit others -- to do so.---- DISCLAIMER---- ALL MATERIALS OR INFORMATION HEREIN RELEASED, MADE AVAILABLE OR-- DISCLOSED ARE AS IS. THE GOVERNMENT MAKES NO EXPRESS OR IMPLIED -- WARRANTY AS TO ANY MATTER WHATSOEVER, INCLUDING THE CONDITIONS OF THE-- SOFTWARE, DOCUMENTATION OR OTHER INFORMATION RELEASED, MADE AVAILABLE -- OR DISCLOSED, OR THE OWNERSHIP, MERCHANTABILITY, OR FITNESS FOR A-- PARTICULAR PURPOSE OF SAID MATERIAL.--*---- OBJECTIVE:-- Check that the abortable part of an asynchronous select statement-- is aborted if it does not complete before the triggering statement-- completes, where the triggering statement is a delay_relative-- statement and check that the sequence of statements of the triggering -- alternative is executed after the abortable part is left.---- TEST DESCRIPTION:-- Declare a task with an accept statement containing an asynchronous-- select with a delay_relative triggering statement. Parameterize-- the accept statement with the time to be used in the delay. Simulate a-- time-consuming calculation by declaring a procedure containing an-- infinite loop. Call this procedure in the abortable part.---- The delay will expire before the abortable part completes, at which-- time the abortable part is aborted, and the sequence of statements-- following the triggering statement is executed.------ CHANGE HISTORY:-- 06 Dec 94 SAIC ACVC 2.0----!with Report;with ImpDef;procedure C974001 is --========================================================-- -- Medium length delay Allotted_Time : constant Duration := ImpDef.Switch_To_New_Task; Calculation_Canceled : exception; Count : Integer := 1234; procedure Lengthy_Calculation is begin -- Simulate a non-converging calculation. loop -- Infinite loop. Count := (Count + 1) mod 10; delay ImpDef.Minimum_Task_Switch; -- allow other task end loop; end Lengthy_Calculation; --========================================================-- task type Timed_Calculation is entry Calculation (Time_Limit : in Duration); end Timed_Calculation; task body Timed_Calculation is -- begin loop select accept Calculation (Time_Limit : in Duration) do -- -- -- Asynchronous select is tested here -- -- -- select delay Time_Limit; -- Time_Limit is not up yet, so -- Lengthy_Calculation starts. raise Calculation_Canceled; -- This is executed after -- Lengthy_Calculation aborted. then abort Lengthy_Calculation; -- Delay expires before complete, -- so this call is aborted. -- Check that the whole of the abortable part is aborted, -- not just the statement in the abortable part that was -- executing at the time Report.Failed ("Abortable part not aborted"); end select; Report.Failed ("Triggering alternative sequence of " & "statements not executed"); exception -- New Ada 9x: handler within accept when Calculation_Canceled => if Count = 1234 then Report.Failed ("Abortable part did not execute"); end if; end Calculation; or terminate; end select; end loop; exception when others => Report.Failed ("Unexpected exception in Timed_Calculation task"); end Timed_Calculation; --========================================================--begin -- Main program. Report.Test ("C974001", "Asynchronous Select: Trigger is delay_relative" & " which completes before abortable part"); declare Timed : Timed_Calculation; -- Task. begin Timed.Calculation (Time_Limit => Allotted_Time); -- Asynchronous select -- inside accept block. exception when Calculation_Canceled => null; -- expected behavior end; Report.Result;end C974001;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?