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 15:24:08 +0200
Date: 2005-04-03T15:22:09+02:00	[thread overview]
Message-ID: <pan.2005.04.03.13.24.07.321271@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

You were right.
After gdb-ing i saw :
With type he create Thread for every client, without he create two threads
and the Task wait Go after Go and not every go at the same times.
Thanks.



  parent reply	other threads:[~2005-04-03 13:24 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       ` "multithread" Jean-Baptiste CAMPESATO
2005-04-03 13:42         ` "multithread" Adrian Knoth
2005-04-03 13:24       ` Jean-Baptiste CAMPESATO [this message]
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