This is a demonstration of a simple periodic task. $ TYPE PERIODIC.ADA with CALENDAR ; use CALENDAR ; with TEXT_IO ; use TEXT_IO ; procedure MAIN is task GO_PERIOD is entry START ; end GO_PERIOD ; task body GO_PERIOD is INTERVAL : constant DURATION := 1.0 ; -- seconds NEXT_TIME : TIME := CLOCK ; -- now procedure PERIODIC is begin PUT_LINE ( " IN PERIODIC " ) ; end PERIODIC ; begin accept START ; for I in 1 .. 10 loop -- would never terminate with just "loop" delay NEXT_TIME - CLOCK ; -- CLOCK is function in CALENDAR PERIODIC ; -- call procedure NEXT_TIME := NEXT_TIME + INTERVAL ; end loop ; end GO_PERIOD ; begin PUT_LINE ( " IN MAIN" ) ; GO_PERIOD.START ; -- kick off the process -- do something in "parallel" with PERIODIC PUT_LINE ( " still in MAIN" ) ; PUT_LINE ( " still in MAIN" ) ; PUT_LINE ( " still in MAIN" ) ; PUT_LINE ( " still in MAIN" ) ; PUT_LINE ( " still in MAIN" ) ; PUT_LINE ( " last of MAIN" ) ; end MAIN ; $ ADA PERIODIC $ ACS LINK MAIN $ RUN MAIN IN MAIN IN PERIODIC still in MAIN still in MAIN still in MAIN still in MAIN still in MAIN last of MAIN IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC This is the output from an old version of AdaEd IN MAIN still in MAIN still in MAIN still in MAIN still in MAIN IN PERIODIC still in MAIN last of MAIN IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC IN PERIODIC Execution time: 43 seconds $ exit