From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on polar.synack.me X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=BAYES_00,FREEMAIL_FROM, PP_MIME_FAKE_ASCII_TEXT autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,bf6902412865b202 X-Google-Attributes: gid103376,public X-Google-Language: ENGLISH,ASCII Path: g2news1.google.com!news4.google.com!news.glorb.com!wn14feed!worldnet.att.net!bgtnsc04-news.ops.worldnet.att.net.POSTED!53ab2750!not-for-mail Newsgroups: comp.lang.ada Subject: Re: "multithread" From: Jim Rogers References: User-Agent: Xnews/5.04.25 Message-ID: Date: Sun, 03 Apr 2005 01:34:48 GMT NNTP-Posting-Host: 12.73.180.8 X-Complaints-To: abuse@worldnet.att.net X-Trace: bgtnsc04-news.ops.worldnet.att.net 1112492088 12.73.180.8 (Sun, 03 Apr 2005 01:34:48 GMT) NNTP-Posting-Date: Sun, 03 Apr 2005 01:34:48 GMT Organization: AT&T Worldnet Xref: g2news1.google.com comp.lang.ada:10237 Date: 2005-04-03T01:34:48+00:00 List-Id: Jean-Baptiste CAMPESATO 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