comp.lang.ada
 help / color / mirror / Atom feed
From: Jim Rogers <jimmaureenrogers@att.net>
Subject: Re: "multithread"
Date: Sun, 03 Apr 2005 01:34:48 GMT
Date: 2005-04-03T01:34:48+00:00	[thread overview]
Message-ID: <YKH3e.36084$cg1.25536@bgtnsc04-news.ops.worldnet.att.net> (raw)
In-Reply-To: pan.2005.04.02.22.37.39.88996@nospam.a2lf.org

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 1954 bytes --]

Jean-Baptiste CAMPESATO <camje_lemon@nospam.a2lf.org> wrote in 
news:pan.2005.04.02.22.37.39.88996@nospam.a2lf.org:

> Hello,
> I want to create a function wich can called "several times at the same 
> time", MultiThread.
> I found task and i tested :
> In ADS :
>         -- Tache pour le traitement du client
>         task Traitement is
>                 entry Go(Client:Socket_Type);
>         end 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);
>                         -- Et on cr�� un thread pour lui
>                         Traitement.Go(Client);
>                 end loop;
> 
> 
> And the first time i call the task it's Ok, but at the second time i've 
a
> "TASKING_ERROR".
Task Traitement terminates at the end of its first execution. Tasks are 
not
callable after they terminate. You need to create a loop in the 
Traitement
to allow it to accept the Go entry as many times as necessary.

task body Traitement is
begin
   loop
      select
         accept Go(Client : Socket_Type) do
            Put_Line("Tache.");
            Close_Socket(Client);
         or 
            terminate;
      end select;
   end loop;
end Traitement;


The selective accept with a terminate alternative should provide you
with the functionality you want. The task will continue to loop through
the selection of the entry Go until the the task that calls the Go entry
terminates. Task Traitement will then automatically terminate cleanly.

Jim Rogers




  reply	other threads:[~2005-04-03  1:34 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 ` Jim Rogers [this message]
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       ` "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