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;
prev 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