Tasking Hello World
--------------------------------------------------------------------------------
Ada 提供具有一般用途的具有所有预期特征的程序语言。
Ada 也用来为程序员提供一些编写程序的实时组件
Ada 亦被称为实时运行的"工作"组件.
下面的程序用一些简单的 Ada 组件显示传统的"Hello World" 程序。
下面程序的每一行输出都是独立的,每个任务都是这样设计的,就是花任意量的时间完成他们的工作。
这就预示着程序每次运行时的输出次序都是不同的。
三个任务组件定义成 M1,M2,M3。 如果三个任务不同时运行,程序的输出顺序将会是预期的输出顺序。
但是程序每次输出结果顺序的变化证明了三个任务必须是在同一时刻执行的。
Ada.Strings.Unbounded package 用来在每个任务里面定义一个最大长度的字符变量.
允许你在没有格式问题的情况下使每个任务的每一行都在屏幕上平均的输出.
一个乱数产生器被用来使产生每个任务的延迟在 0.0秒和1.0秒之间. 随意延迟将会使每个任务的完成
都会花费不同的时间.
而最先完成的那个任务将会出现在屏幕的最前面.
-----------------------------------------------------------------------
-- Hello World program in Ada using tasking
-----------------------------------------------------------------------
with Ada.Text_Io;
with Ada.Strings.Bounded;
with Ada.Numerics.Float_Random;
procedure HelloTask is
package Inner_Message is new
Ada.Strings.Bounded.Generic_Bounded_Length(72);
use Inner_Message;
task type Messenger is
entry Start(Message : in String);
end Messenger;
task body Messenger is
use Ada.Numerics.Float_Random;
Seed : Generator;
Msg : Bounded_String;
begin
accept Start(Message : in String)
do
Msg := To_Bounded_String(Message);
end Start;
Reset(Seed);
delay Duration(Random(Seed));
Ada.Text_Io.Put_Line(To_String(Msg));
end Messenger;
M1 : Messenger;
M2 : Messenger;
M3 : Messenger;
begin
M1.Start("Hello");
M2.Start("From");
M3.Start("Ada !");
end HelloTask;