comp.lang.ada
 help / color / mirror / Atom feed
* Gnat Tasking behaviour
@ 1997-09-08  0:00 juan carlos diaz martin
  0 siblings, 0 replies; only message in thread
From: juan carlos diaz martin @ 1997-09-08  0:00 UTC (permalink / raw)


[-- Attachment #1: Doc4.txt --]
[-- Type: text/plain, Size: 2826 bytes --]



Hello!!
The following program

  1. behaves the same way in GNAT DOS 3.05 and GNAT Win95 3.09
             ------------
  2. behaves different in    GNAT DOS 3.07
             ---------


Main Program:
-------------

    --Body
    with R;
    with S;
    procedure Principal is
    begin
      null;
    end Principal;


Package R (increments periodically a variable and prints it):
---------

    --Specification
    package R is
      pragma Elaborate_Body;
    end R;

    --Body
    with D;
    with text_io; use text_io;
    with Ada.Real_Time; use Ada.Real_Time;
    package body R is
      N : D.D_T;
      task Thread is
        pragma Priority( 3);
      end Thread;

      procedure Codigo_Periodico is
        package My_Int_IO is new Integer_IO(Integer); use My_Int_IO;
      begin 
        D.Operacion (D.Inc, N);
        Put(integer(N));
      end Codigo_Periodico;

      task body Thread is
        T : Time;
        Periodo : Time_Span :=  Milliseconds(2000);
      begin
        T := Clock + Periodo;
        loop
          delay until(T);
          Codigo_Periodico;
          T := T + Periodo;
        end loop;
      end Thread;
    end R;


Package S: (The same than R, but it decrements instead of incrementing)
----------
  
    --Specification
    package S is
      pragma Elaborate_Body;
    end S;

    --Body
    with D;
    with text_io; use text_io;
    with Ada.Real_Time; use Ada.Real_Time;
    package body S is
      N : D.D_T;
      task Thread is
        pragma Priority(3);
      end Thread;

      procedure Codigo_Periodico is
        package My_Int_IO is new Integer_IO(Integer); use My_Int_IO;
      begin 
        D.Operacion (D.Dec, N);  --(The only different sentence from package R)
        Put(integer(N));
      end Codigo_Periodico;

      task body Thread is
        T : Time;
        Periodo : Time_Span :=   Milliseconds(2000);
      begin
        T := Clock + Periodo;
        loop
          delay until(T);
          Codigo_Periodico;
          T := T + Periodo;
        end loop;
      end Thread;
    end S;


Package D:
---------

    --Specification
    package D is
      type Op_T is (Inc, Dec);
      type D_T is new integer;
      procedure Operacion (Op : Op_T; Res : out D_T);
    end D;

     --Body
    package body D is  
      dato : D_T := 0;
      procedure Operacion (Op : Op_T; Res : out D_T) is
      begin
        case Op is
          when Inc => dato := dato + 1;
          when Dec => dato := dato - 1;
        end case;
        Res := dato;
      end Operacion;
    end D;

Well, 

The output of GNAT DOS 3.05 and GNAT Win95 3.09 is somthing like that:
0 	1	0	1	0	-1 	0	1	0	-1 ... (oscilates)

The output of GNAT DOS 3.07 is somthing like that:
0 	-1	-2	-3	-4	-5 	-6	-7	-8	-9 ... (monotonic)

My Question is:
 What is the good one?? Both??







^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~1997-09-08  0:00 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
1997-09-08  0:00 Gnat Tasking behaviour juan carlos diaz martin

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