comp.lang.ada
 help / color / mirror / Atom feed
From: george.priv@gmail.com
Subject: Re: delay until problem in Windows
Date: Wed, 9 Apr 2008 07:56:25 -0700 (PDT)
Date: 2008-04-09T07:56:25-07:00	[thread overview]
Message-ID: <b2275c51-670f-40ac-bb58-acdc614bd31b@z38g2000hsc.googlegroups.com> (raw)
In-Reply-To: n0sho1878tfw$.w81wwj702qrw.dlg@40tude.net

On Apr 7, 3:25 am, "Dmitry A. Kazakov" <mail...@dmitry-kazakov.de>
wrote:
> On Sun, 6 Apr 2008 20:10:38 -0700 (PDT), george.p...@gmail.com wrote:
> > On Apr 5, 6:51 pm, george.p...@gmail.com wrote:
>
> [...]
>
> > with Ada.Calendar;
> > use Ada.Calendar;
>
> I don't know the implementation of, but Ada.Calendar is a political time,
> influenced by the time synchronization stuff. What happens if you replace
> it by Ada.Real_Time?
>
> --
> Regards,
> Dmitry A. Kazakovhttp://www.dmitry-kazakov.de

You were right: so far the Real_Time version is running for 48 hours
without failing.  So that may be a workaround.

with Ada.Real_Time;
use Ada.Real_Time;
with Ada.Text_IO;
use Ada.Text_IO;

--with Ada.RealFormatting;
with Ada.Calendar.Formatting;

procedure Delay_RT is

   Start_Time  : Time              := Clock;
   Time_Failed : Time              := Start_Time;
   ST          : Ada.Calendar.Time := Ada.Calendar.Clock;
   FT          : Ada.Calendar.Time := ST;

   task Delay_Test_Tsk is
      entry Term;
   end Delay_Test_Tsk;

   task body Delay_Test_Tsk is

      DT            : constant Time_Span := Seconds (10); -- Desired
Delta T
      Time_For_Next :          Time      := Clock + DT;   -- Next
cycle
      Last          :          Time      := Clock;        -- Last
cycle clocked
      Fail_Count    :          Natural   := 0;

   begin

      while Fail_Count < 5 loop

         select
            accept Term;
            exit;
         or
            delay until Time_For_Next;
            declare
               Actual_Delta : Time_Span := Clock - Last;
            begin

               Last := Clock;
               Time_For_Next := Last + DT;

               Put_Line("Actual Delay: " & Duration'Image(To_Duration(
                        Actual_Delta))
                  & ", Running (h):"
                  & Duration'Image(To_Duration(Clock - Start_Time)/
3600.0));
               if Actual_Delta < DT or Actual_Delta > (DT +
Seconds(1)) then
                  if Fail_Count = 0 then
                     Time_Failed := Clock;
                     FT := Ada.Calendar.Clock;
                  end if;
                  Fail_Count := Fail_Count + 1;
               else
                  Fail_Count := 0;
               end if;
            end;

         end select;

      end loop;

      Put_Line("Started at:" & Ada.Calendar.Formatting.Image(ST));

      if Time_Failed /= Start_Time then
         Put_Line("Failed at :" & Ada.Calendar.Formatting.Image(FT));
         Put_Line("Failed after  :" & Duration'Image(To_Duration(
                  Time_Failed -
                  Start_Time)));
      end if;

   end Delay_Test_Tsk;

   Line : String (1 .. 80);
   Last : Natural;

begin
   loop
      Get_Line(Line, Last);
      exit when Line(1) = 'q' or Line(1) = 'Q';
   end loop;
   Delay_Test_Tsk.Term;
end Delay_RT;





      parent reply	other threads:[~2008-04-09 14:56 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-05 22:51 delay until problem in Windows george.priv
2008-04-06 21:04 ` Jacob Sparre Andersen
2008-04-07  3:32   ` george.priv
2008-04-07  3:10 ` george.priv
2008-04-07  7:25   ` Dmitry A. Kazakov
2008-04-07 14:43     ` george.priv
2008-04-07 14:51       ` george.priv
2008-04-08 11:02         ` Alex R. Mosteo
2008-04-09 14:56     ` george.priv [this message]
replies disabled

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