comp.lang.ada
 help / color / mirror / Atom feed
From: "John B. Matthews" <nospam@nospam.invalid>
Subject: Re: Barrier re-evaluation issue with GNAT 4.3.2
Date: Thu, 01 Oct 2009 12:12:47 -0400
Date: 2009-10-01T12:12:47-04:00	[thread overview]
Message-ID: <nospam-3F8A72.12124701102009@news.aioe.org> (raw)
In-Reply-To: nospam-12AAE0.11590930092009@news.aioe.org

In article <nospam-12AAE0.11590930092009@news.aioe.org>,
 "John B. Matthews" <nospam@nospam.invalid> wrote:

[...]
> Another alternative, suggested by Dmitry A. Kazakov, is to replace 
> entry Wait with procedure Wait, which obviates the need for Signal: 

Sorry, I carelessly posted code with a busy-wait. Please consider this 
alternative, which polls the timer's state:

with Ada.Text_IO;
with Alarm_Clock;

procedure Main is
   My_Alarm : Alarm_Clock.Alarm_Type;
begin
   Ada.Text_IO.Put_Line ("Setting alarm ...");
   My_Alarm.Set;

   Ada.Text_IO.Put_Line ("Waiting for alarm ...");
   My_Alarm.Wait;

   Ada.Text_IO.Put_Line ("ALARM!!");
end Main;

package Alarm_Clock is

   type Alarm_Type is tagged null record;
   procedure Set(Alarm : Alarm_Type);
   procedure Wait(Alarm : Alarm_Type);

end Alarm_Clock;

with Ada.Real_Time.Timing_Events;

package body Alarm_Clock is

   use Ada.Real_Time;
   Timer : Timing_Events.Timing_Event;
   Fired : Boolean := False;

   protected Clock is
      procedure Wakeup(Event : in out Timing_Events.Timing_Event);
   end Clock;

   protected body Clock is
      procedure Wakeup(Event : in out Timing_Events.Timing_Event) is
      begin
         Fired := True;
      end Wakeup;
   end Clock;

   procedure Set(Alarm : Alarm_Type) is
   begin
      Timer.Set_Handler(In_Time => Seconds(3),
                        Handler => Clock.Wakeup'Access);
   end Set;

   procedure Wait(Alarm : Alarm_Type) is
   begin
      loop
         delay 1.0;
         exit when Fired;
      end loop;
   end Wait;

end Alarm_Clock;


-- 
John B. Matthews
trashgod at gmail dot com
<http://sites.google.com/site/drjohnbmatthews>



  reply	other threads:[~2009-10-01 16:12 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-09-24 17:02 Barrier re-evaluation issue with GNAT 4.3.2 Reto Buerki
2009-09-24 17:47 ` Dmitry A. Kazakov
2009-09-25  8:50   ` Brad Moore
2009-09-25  9:17     ` Dmitry A. Kazakov
2009-09-25  9:57       ` Ludovic Brenta
2009-09-25 10:31         ` Dmitry A. Kazakov
2009-09-25 11:23       ` Jean-Pierre Rosen
2009-09-28 10:41         ` Reto Buerki
2009-09-25 17:06       ` Brad Moore
2009-09-25 18:42         ` Dmitry A. Kazakov
2009-09-25 19:39           ` Brad Moore
2009-09-28 10:18   ` Reto Buerki
2009-09-25 15:56 ` John B. Matthews
2009-09-26 14:23   ` John B. Matthews
2009-09-28 10:28   ` Reto Buerki
2009-09-28 12:39     ` John B. Matthews
2009-09-28 13:25       ` Reto Buerki
2009-09-28 14:05         ` Reto Buerki
2009-09-28 18:38           ` Jeffrey R. Carter
2009-09-28 18:51             ` Dmitry A. Kazakov
2009-09-29  8:37               ` Reto Buerki
2009-09-28 21:13             ` Robert A Duff
2009-09-28 22:28               ` Jeffrey R. Carter
2009-10-10  5:41                 ` Randy Brukardt
2009-09-29  8:30             ` Reto Buerki
2009-09-29 15:06               ` John B. Matthews
2009-09-30 14:12                 ` Reto Buerki
2009-09-30 15:59                   ` John B. Matthews
2009-10-01 16:12                     ` John B. Matthews [this message]
2009-10-01 17:17                       ` Anh Vo
2009-10-02  2:26                         ` John B. Matthews
replies disabled

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