comp.lang.ada
 help / color / mirror / Atom feed
From: Jean-Baptiste CAMPESATO <camje_lemon@nospam.a2lf.org>
Subject: Re: "multithread"
Date: Sun, 03 Apr 2005 14:14:02 +0200
Date: 2005-04-03T14:12:04+02:00	[thread overview]
Message-ID: <pan.2005.04.03.12.14.01.422690@nospam.a2lf.org> (raw)
In-Reply-To: 1504092.Iq66gXWrKJ@linux1.krischik.com

Le Sun, 03 Apr 2005 13:13:56 +0200, Martin Krischik a ᅵcritᅵ:

> Jean-Baptiste CAMPESATO wrote:
> 
>> Le Sun, 03 Apr 2005 10:40:10 +0200, Martin Krischik a ᅵcritᅵ:
>> 
>>> Jean-Baptiste CAMPESATO wrote:
>>> 
>>>> Hello,
>>>> I want to create a function wich can called "several times at the same
>>>> time", MultiThread.
>>> 
>>> Apart from the tips you allready got: If you want Go to be called more
>>> then once "at the same time" you will need a "task type" instead of a
>>> simple task.
>>> 
>>> 
>>> 
>>>> I found task and i tested :
>>>> In ADS :
>>>>         -- Tache pour le traitement du client
>>>>         task Traitement is
>>>>                 entry Go(Client:Socket_Type);
>>>>         end Traitement;
>>> 
>>>          task type Traitement is
>>>                  entry Go(Client:Socket_Type);
>>>          end Traitement;
>>> 
>>>        type Traitement_Access is access Traitement ;
>>> 
>>>> -----------------------------------------------
>>>> In ADB :
>>>>         task body Traitement is
>>>>         begin
>>>>                 accept Go(Client:Socket_Type) do
>>>>                         put_line("Tache.");
>>>>                         Close_Socket(Client);
>>>>                 end Go;
>>>>         end Traitement;
>>>> ------------------------------------------------
>>>> In the loop wich call Traitement:
>>>>                 loop
>>>>                         -- On accepte le client
>>>>                         Accept_Socket (Server, Client, Address);
>>> 
>>> Inside the loop you would need to create a new task from the task type:
>>> 
>>>      declare
>>>           New_Traitement  : Traitement_Access := new Traitement
>>>      begin
>>>           -- Et on crᅵᅵ un thread pour lui
>>>           New_Traitement.Go(Client);
>>>     end;
>>>   
>>>>                 end loop;
>>> 
>>> And now it get's tricky - because this is the one point where garbage
>>> collection is really missing. Garbage collection is only an optional
>>> feature and standart Ada compilers haven't got it.
>>> 
>>> But you never know when the task is finished so you never know when to
>>> free the memory allocated for the task.
>>> 
>>> Martin
>> 
>> Ok thanks.
>> But the answer of Jim Rogers works for me :/.
>> It's strange.
> 
> Prehaps "Go" executes so fast that you never notice the difference ;-).
> 
> Martin

hello.
I wrote a delay for 5seconds, and executed 3 tasks before 5secons without
error.
Hmm, i will retest your task type to see differences. 
Thanks.



  reply	other threads:[~2005-04-03 12:14 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-04-02 22:37 "multithread" Jean-Baptiste CAMPESATO
2005-04-03  1:34 ` "multithread" Jim Rogers
2005-04-03  7:30   ` "multithread" Jean-Baptiste CAMPESATO
2005-04-03  7:12 ` "multithread" Martin Dowie
2005-04-03  8:40 ` "multithread" Martin Krischik
2005-04-03  9:07   ` "multithread" Jean-Baptiste CAMPESATO
2005-04-03 11:13     ` "multithread" Martin Krischik
2005-04-03 12:14       ` Jean-Baptiste CAMPESATO [this message]
2005-04-03 13:42         ` "multithread" Adrian Knoth
2005-04-03 13:24       ` "multithread" Jean-Baptiste CAMPESATO
2005-04-03 22:27 ` "multithread" Jeffrey Carter
replies disabled

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