comp.lang.ada
 help / color / mirror / Atom feed
From: balmacara9@aol.com (Balmacara9)
Subject: Re: Task question
Date: 1997/10/30
Date: 1997-10-30T00:00:00+00:00	[thread overview]
Message-ID: <19971030040501.XAA24250@ladder02.news.aol.com> (raw)
In-Reply-To: 3439D647.7C43@home.com


>Subject: Task question
>From: Larry Coon <lmcoon@home.com>
>Date: Tue, Oct 7, 1997 02:27 EDT
>Message-id: <3439D647.7C43@home.com>
>
>I'm having a problem getting a task body to work
>the way I want it to.  Here's a contrived example
>showing (with illegal syntax) what I want to do:
>
>task body x is
>begin
>   loop
>      select
>         accept my_rendezvous (some_data: some_data_type) do
>            -- Rendezvous stuff
>         end my_rendezvous;
>      or
>         exit;  -- This is illegal
>      end select;
>   end loop;
>   -- Now do more stuff.
>end x;
>
>The idea is that this task serves as a collector.
>Another task continually initiates rendezvous (what
>is plural for rendezvous?), with this task, and this
>tasks collects the information that is sent.  When the
>"calling" task is done it terminates.  Since the select
>statement is smart, it knows it can't be called any
>more and invokes the exit, which terminates the loop
>so the rest of the task body executes, and it does
>more stuff.  That's how I want it to work, anyway.
>
>If I do:
>
>   or
>      terminate;
>
>in place of the exit then it knows when the "calling"
>task is done and will terminate the task, but this isn't
>what I want -- the "other stuff" never gets executed.
>
>I've also tried adding another accept as a signal for
>when the "calling" task is done:
>
>task body x is
>begin
>   loop
>      select
>         accept my_rendezvous (some_data: some_data_type) do
>            -- Rendezvous stuff
>         end my_rendezvous;
>      or
>         accept done do
>            exit;
>         end done;
>      end select;
>   end loop;
>   -- Now do more stuff.
>end x;
>
>Now the "calling" task keeps initiating a my_rendezvous,
>but when it's finished it inititates a done to let this
>task know it can proceed.  This doesn't work either -- it
>doesn't let an exit transfer control out of the accept
>statement.
>
>Am I missing an obvious way to do what I want?
>
>Larry Coon
>University of California
>larry@fs2.assist.uci.edu
>and lmcoom@home.com
>
>
>
>
>
>
>

Just change your task like so....


task body x is
begin
   loop
      select
         accept my_rendezvous (some_data: some_data_type) do
            -- Rendezvous stuff
         end my_rendezvous;
      or
         accept done;
            exit;
      end select;
   end loop;
   -- Now do more stuff.
end x;

You do not have to do all your work during the rendezvous, you can use the
 rendevous for pure synchronization and then perform the work after the
 rendezvous.

Between the "do" and "end" of a rendezvous, the calling task is blocked so you
 must release the calling task before exiting the loop.




  parent reply	other threads:[~1997-10-30  0:00 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-10-06  0:00 Task question Larry Coon
1997-10-07  0:00 ` David C. Hoos, Sr.
1997-10-07  0:00   ` Steve O'Neill
1997-10-07  0:00   ` Larry Coon
1997-10-08  0:00   ` Tom Moran
1997-10-08  0:00   ` Matthew Heaney
1997-10-07  0:00 ` Matthew Heaney
1997-10-07  0:00   ` Larry Coon
1997-10-07  0:00 ` Robert A Duff
1997-10-13  0:00   ` Larry Coon
1997-10-30  0:00 ` Balmacara9 [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-12-10 22:12 shaunpatterson
2007-12-10 22:29 ` gpriv
2007-12-10 22:51   ` shaunpatterson
2007-12-10 23:13     ` gpriv
2007-12-10 23:40 ` Robert A Duff
2007-12-11  0:43 ` anon
1997-10-16  0:00 Paul Van Gorp
1997-10-19  0:00 ` elaine.waybright
1997-11-01  0:00   ` Matthew Heaney
1997-10-21  0:00 ` Robert A Duff
1996-09-15  0:00 task question Nicolay Belofastow
1996-09-23  0:00 ` Matthew Heaney
     [not found] <204266@QZCOM>
1986-09-26 17:28 ` Task question Matts_Kallioniemi_QZ
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox