comp.lang.ada
 help / color / mirror / Atom feed
From: NiGHTS <nights@unku.us>
Subject: Re: Timeouts in Ada
Date: Thu, 17 Jul 2014 09:46:04 -0700 (PDT)
Date: 2014-07-17T09:46:04-07:00	[thread overview]
Message-ID: <7581b098-ea30-4b34-a51e-2f0dd5a57563@googlegroups.com> (raw)
In-Reply-To: <cd50cff5-a37a-4c41-a091-cc6c0aae6c8f@googlegroups.com>

On Thursday, July 17, 2014 12:12:13 PM UTC-4, Adam Beneschan wrote:
> 
> I think the mistake you're making is treating the two sequences of statements 
> 
> 
> 
>      Password_Server.Set (User_Name, Password);
> 
>      Put_Line ("Done");
> 
> 
> 
> and 
> 
> 
> 
>      delay 10.0;
> 
>      Put_Line ("The system is busy now, please try again later.");
> 
> 
> 
> as independent "bodies".
> 
> 
> 
> That's not how SELECT works.  The first statement following SELECT is treated specially.  It is restricted; it can only be an entry call, an ACCEPT, or a DELAY (the DELAY is possible only if there's a "THEN ABORT" part).  The first statement following OR is also restricted, and is treated specially; if you're selecting on an entry call, it *must* be a DELAY.
> 
> 
> 
> So instead of looking at this as two separate blocks of code and trying to figure out how the task executes those two blocks, you need to look at those first statements to see what the SELECT's purpose is.  And when you have SELECT <entry-call> ... OR DELAY 10.0, it means that the task waits until the entry is available, but it only waits 10 seconds and then gives up.  And then, depending on whether the entry call timed out or not, it executes one or the other of the statements that *follow* the first statement.  This doesn't require separate threads trying to execute both blocks.  
> 
> 
> 
> Look at it more like this [this is not real Ada code, of course]:
> 
> 
> 
>     if Try_Entry_Call (Password_Server.Set (User_Name, Password), Timeout => 10.0) = ACCEPTED then
> 
>          Wait_For_Rendezvous_To_Complete;
> 
>          Put_Line("Done");
> 
>     else
> 
>          Put_Line("The system is busy now, please try again later."); 
> 
>     end if;
> 
> 
> 
> If the first statement after SELECT is an ACCEPT or DELAY, or if there's a THEN ABORT clause, the statement will have different semantics, and it won't look like the IF statement I wrote above.  There are four different kinds of SELECT.
> 
> 
> 
>                                -- Adam

Your answer was highly intuitive, so thank you for your careful explanation. 

So even if the entry call takes an hour, it will still wait the full hour until it completes before entering the "or delay" section? This is what I am understanding so far.

Also, can two entry calls be placed like this?

    select call_1(params)
        ...
    or call_2(params)
        ...
    or delay 10
        ...
    end select

If so, how would it know which finishes first without having them run concurrently? Don't see a point in having them run one after the other.

I have also seen the select used with an "else". What exactly is the difference between "or" and "else"? Is "else" used when a "delay" is not involved? Otherwise I don't see the point in the "else" path.


  reply	other threads:[~2014-07-17 16:46 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-17  5:18 Timeouts in Ada NiGHTS
2014-07-17  7:08 ` Simon Wright
2014-07-17  8:35   ` NiGHTS
2014-07-21 23:34   ` Randy Brukardt
2014-07-22  1:11     ` Shark8
2014-07-22  7:39       ` J-P. Rosen
2014-07-22  8:31         ` Simon Wright
2014-07-22 21:52       ` Randy Brukardt
2014-07-17  7:38 ` J-P. Rosen
2014-07-17  8:40   ` NiGHTS
2014-07-17 10:00     ` J-P. Rosen
2014-07-17 19:27   ` Jeffrey Carter
2014-07-17 19:51     ` J-P. Rosen
2014-07-17 20:52       ` Jeffrey Carter
2014-07-17 20:29     ` Adam Beneschan
2014-07-17 20:52       ` J-P. Rosen
2014-07-21 23:44         ` Randy Brukardt
2014-07-17 20:43     ` Jeffrey Carter
2014-07-21 23:37   ` Randy Brukardt
2014-07-17  7:42 ` Dmitry A. Kazakov
2014-07-17  8:59   ` NiGHTS
2014-07-17  9:48     ` Dmitry A. Kazakov
2014-07-17 17:10       ` NiGHTS
2014-07-17 20:45         ` Dmitry A. Kazakov
2014-07-17 16:12 ` Adam Beneschan
2014-07-17 16:46   ` NiGHTS [this message]
2014-07-17 17:11     ` Simon Wright
2014-07-17 17:58       ` NiGHTS
2014-07-17 19:02         ` Jeffrey Carter
2014-07-17 18:58       ` Jeffrey Carter
2014-07-17 18:12     ` Adam Beneschan
2014-07-17 19:27       ` Jeffrey Carter
2014-07-17 18:56     ` Jeffrey Carter
2014-07-23 22:37     ` Robert A Duff
2014-07-24  9:23       ` AdaMagica
2014-07-24 15:37         ` Robert A Duff
2014-07-25  5:16           ` Randy Brukardt
2014-07-25  9:11           ` AdaMagica
2014-07-25 16:15             ` Brad Moore
2014-07-25 16:34             ` Dmitry A. Kazakov
2014-07-17 19:27 ` Jeffrey Carter
replies disabled

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