comp.lang.ada
 help / color / mirror / Atom feed
From: "Dmitry A. Kazakov" <mailbox@dmitry-kazakov.de>
Subject: Re: Need info about Ada tasks
Date: Thu, 25 Sep 2008 15:49:28 +0200
Date: 2008-09-25T15:49:28+02:00	[thread overview]
Message-ID: <38vvmtnic6su$.13akh3j9qqeli$.dlg@40tude.net> (raw)
In-Reply-To: 1r3nd4190fqnicb4tdebo1ctt70cjetnhi@4ax.com

On Thu, 25 Sep 2008 13:31:27 GMT, Fionn Mac Cumhaill wrote:

> My simple solution has a minor problem; I have a select just after the
> display routine that receives the abort message, but if the message
> doesn't arrive on time I get another iteration of the loop before the
> task aborts. How can I make this thing abort immediately, even when I
> have a delay(60.0) to give a 1-minute delay between display refreshes?
> I.e., how do I bail out in the middle of a delay?

1. If the abort event is implemented as a protected object:

task body Refresh_Engine is
begin
   loop
      ... -- Refresh the display
      select -- Timed entry call
         Abort_Event.Wait;
         exit;
      or delay 60.0;
      end select;
   end loop;
end Refresh_Engine;

2. If the abort event is signaled by an entry call:

task body Refresh_Engine is
begin
   loop
      ... -- Refresh the display
      select -- Selective accept with a time out alternative
         accept Abort_Event;
         exit;
      or delay 60.0;
      end select;
   end loop;
end Refresh_Engine;

-- 
Regards,
Dmitry A. Kazakov
http://www.dmitry-kazakov.de



  reply	other threads:[~2008-09-25 13:49 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-09-25 13:31 Need info about Ada tasks Fionn Mac Cumhaill
2008-09-25 13:49 ` Dmitry A. Kazakov [this message]
2008-09-26  5:06   ` Fionn Mac Cumhaill
2008-09-26 10:21 ` Stephen Leake
2008-09-26 12:46   ` Fionn Mac Cumhaill
2008-09-27  5:56     ` Randy Brukardt
2008-09-27  7:48       ` Dmitry A. Kazakov
replies disabled

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