comp.lang.ada
 help / color / mirror / Atom feed
From: "jimmaureenrogers@worldnet.att.net" <jimmaureenrogers@worldnet.att.net>
Subject: Re: Newbie: Task parametering
Date: 16 Oct 2005 17:53:07 -0700
Date: 2005-10-16T17:53:07-07:00	[thread overview]
Message-ID: <1129510387.675070.134750@g14g2000cwa.googlegroups.com> (raw)
In-Reply-To: 4352ef15$0$28225$5a62ac22@per-qv1-newsreader-01.iinet.net.au

Andrew Price wrote:
> Hello all,
>
> I need to initialise some tasks with a few parameters when I instantiate
> them. After looking at
> http://www.adaic.com/docs/95style/html/sec_6/6-1-3.html it seems the
> best way to do this is using an access type discriminant to pass a
> record to the tasks.
>
> With that in mind, I created this record type;
>
> type Task_Data is
>        record
>        Name : aliased String(1..8);
>        Period : aliased Duration;
>        Repetitions : aliased Integer;
>     end record;
>
>
> and then in the main part of my program I use it like this;
>
>     type Task_Handle is access A_Task;  -- used to point to the task
>     Another_Task : Task_Handle;
>     type Data_Handle is access Task_Data; -- used to point to its data
>     Data_For_Task : Data_Handle;
>
> begin  -- The main prog will now spawn three of the above tasks
>
>     -- Parameterise the first task and then start it.
>     Data_For_Task := new Task_Data;
>     Data_For_Task.Name := "Task A  ";
>     Data_For_Task.Period := 0.5;
>     Data_For_Task.Repetitions := 5;
>     Another_Task := new A_Task(Data_For_Task);
>
> So while this approach works, I can't help but feel that I'm going about
> this in a 'long winded' way (especially coming from a mostly C background).
>
> Is there are neater way of putting the data into the Task_Data records?
> Or is there an better approach to the whole task parameterisation I
> should consider?
>
> Now is probably a good time to add the disclaimer that this is part of a
> lab work exercise for a course I'm currently undertaking at university.

There is a little roblem with your approach.

It does not actually initialize the task. The task begins running
before the values are set. You are likely to encounter a race
condition with your approach.

True initialization can be achieved by providing a discriminant
to the task.

On the other hand, you may not need a true initialization.
Instead, you may simply want the task to begin by accepting
an entry that passes in all the values you need to set before
the task does anything else.

Read about the concepts of discriminants and task entries.
You should then be able to decide which approach best fits
your needs.

Jim Rogers




  reply	other threads:[~2005-10-17  0:53 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-10-17  0:23 Newbie: Task parametering Andrew Price
2005-10-17  0:53 ` jimmaureenrogers [this message]
2005-10-17  2:37   ` tmoran
2005-10-17  4:10     ` tmoran
2005-10-17  4:58   ` Andrew Price
2005-10-17 10:02     ` Jacob Sparre Andersen
2005-10-17 15:57   ` Poul-Erik Andreasen
2005-10-17 22:51   ` Stephen Leake
replies disabled

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