From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,7897733b1978b6a4 X-Google-NewGroupId: yes X-Google-Attributes: gida07f3367d7,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII Received: by 10.68.59.229 with SMTP id c5mr3234847pbr.6.1321655117358; Fri, 18 Nov 2011 14:25:17 -0800 (PST) Path: h5ni7134pba.0!nntp.google.com!news1.google.com!postnews.google.com!g21g2000yqc.googlegroups.com!not-for-mail From: Anh Vo Newsgroups: comp.lang.ada Subject: Re: Freezing a task Date: Fri, 18 Nov 2011 14:25:17 -0800 (PST) Organization: http://groups.google.com Message-ID: References: <32992849.648.1321544004241.JavaMail.geo-discussion-forums@vbmh5> NNTP-Posting-Host: 149.32.224.33 Mime-Version: 1.0 X-Trace: posting.google.com 1321655117 31032 127.0.0.1 (18 Nov 2011 22:25:17 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 18 Nov 2011 22:25:17 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: g21g2000yqc.googlegroups.com; posting-host=149.32.224.33; posting-account=Qh2kiQoAAADpCLlhT_KTYoGO8dU3n4I6 User-Agent: G2/1.0 X-Google-Web-Client: true X-Google-Header-Order: HUALESRCNK X-HTTP-UserAgent: Mozilla/5.0 (Windows NT 5.1; rv:8.0) Gecko/20100101 Firefox/8.0,gzip(gfe) Xref: news1.google.com comp.lang.ada:18975 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Date: 2011-11-18T14:25:17-08:00 List-Id: On Nov 17, 11:24=A0pm, a...@att.net wrote: > -- > -- =A0Complete Program > -- > > with Text_IO ; > > procedure u is > > =A0 use Text_IO ; > > =A0 task type test is > =A0 =A0 =A0 entry Start ; =A0 =A0-- initialize and start task > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0-- and task can die if par= ent stops > > =A0 =A0 =A0 entry Wait ; =A0 =A0 -- Send task to sleep for a while > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0-- and task can die if par= ent stops > > =A0 =A0 =A0 entry Continue ; -- wake up task > =A0 =A0 =A0 entry Stop ; =A0 =A0 -- stops and kill task > =A0 end test ; > > =A0 task body test is > > =A0 =A0 =A0 Count : Integer ; > =A0 =A0 begin > =A0 =A0 =A0 -- =A0Initialize task > =A0 =A0 =A0 Count :=3D 0 =A0; > =A0 =A0 =A0 Outer_Loop : loop > =A0 =A0 =A0 =A0 select > =A0 =A0 =A0 =A0 =A0 -- =A0start task > =A0 =A0 =A0 =A0 =A0 accept Start ; > =A0 =A0 =A0 =A0 =A0 =A0 Put_Line ( "Start" ) ; > > =A0 =A0 =A0 =A0 =A0 =A0 Main_Loop : loop > =A0 =A0 =A0 =A0 =A0 =A0 =A0 select > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0pause task > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 accept Wait ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Put_Line ( "Wait" ) ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 New_Line ; > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 select > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0sofware wake up task > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 accept Continue ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Put_Line ( "Continue" ) ; > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0software exit while in wait mod= e > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 or > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 accept Stop ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Put_Line ( "Stop" ) ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 exit Outer_Loop ; > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0exit if parent fails while in w= ait mode > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 or > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 terminate ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 end select ; > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0software exit (abort) while in normal > =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0execution mode > =A0 =A0 =A0 =A0 =A0 =A0 =A0 or > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 accept Stop ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Put_Line ( "Stop" ) ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 exit Outer_Loop ; > > =A0 =A0 =A0 =A0 =A0 =A0 =A0 else > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- - - - - - - - - - - -- > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- =A0Main Tasking Code =A0-- > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 -- - - - - - - - - - - -- > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Put ( "Testing" ) ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Put ( Integer'Image ( Count ) ) ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 New_Line ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 =A0 Count :=3D Count + 1 ; > =A0 =A0 =A0 =A0 =A0 =A0 =A0 end select ; > =A0 =A0 =A0 =A0 =A0 end loop Main_Loop ; > > =A0 =A0 =A0 =A0 -- =A0exit if parent fails > =A0 =A0 =A0 =A0 or > =A0 =A0 =A0 =A0 =A0 terminate ; > =A0 =A0 =A0 =A0 end select ; > =A0 =A0 =A0 end loop Outer_Loop ; > =A0 =A0 =A0 Put_Line ( "Task has Terminated" ) ; > =A0 =A0 end test ; > > =A0testing_task =A0 =A0 =A0: test ; > > begin > =A0 Put_Line ( "Start Tasking" ) ; > =A0 New_Line ; > =A0 -- > =A0 testing_task.Start ; > =A0 delay ( 0.01 ) ; > =A0 testing_task.Wait ; > =A0 delay ( 1.0 ) ; > =A0 testing_task.Continue ; > =A0 delay ( 0.01 ) ; > =A0 testing_task.Wait ; > =A0 -- > =A0 delay ( 1.0 ) ; > =A0 testing_task.Stop ; > =A0 delay ( 0.5 ) ; > =A0 New_Line ; > end u ; I am not sure what was meant by couple of annotated comments mentioning parent fails. Normally, tasks are declared at library level. Thus, they will terminate when the main program terminates. In this particular example, the task will terminate when the main procedure terminates. Anh Vo