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.9 required=5.0 tests=BAYES_00 autolearn=ham autolearn_force=no version=3.4.4 X-Google-Thread: 103376,3abdc4d72c0b7e9d X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!news2.google.com!postnews.google.com!l28g2000prd.googlegroups.com!not-for-mail From: Adam Beneschan Newsgroups: comp.lang.ada Subject: Re: Running a background task Date: Fri, 16 May 2008 08:25:55 -0700 (PDT) Organization: http://groups.google.com Message-ID: References: <760f4092-577e-440e-9fef-fb3ff3389560@h1g2000prh.googlegroups.com> <62f65249-ace3-44fb-9760-976168856c1e@v26g2000prm.googlegroups.com> NNTP-Posting-Host: 66.126.103.122 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1210951556 4559 127.0.0.1 (16 May 2008 15:25:56 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Fri, 16 May 2008 15:25:56 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: l28g2000prd.googlegroups.com; posting-host=66.126.103.122; posting-account=duW0ogkAAABjRdnxgLGXDfna0Gc6XqmQ User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.7.12) Gecko/20050922 Fedora/1.7.12-1.3.1,gzip(gfe),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:104 Date: 2008-05-16T08:25:55-07:00 List-Id: On May 15, 5:43 pm, Bender wrote: > On May 15, 4:31 pm, Adam Beneschan wrote: > > > When Handle_Msg calls on the On_String entry, this starts a > > rendezvous, and Handle_Msg stops when the rendezvous is done. Since > > the "accept" has a "do" part, the rendezvous will not be done until > > the "do" completes, which in your case never happens. Thus, > > Handle_Msg will never proceed past the entry call. > > > It's hard for me to give a solution, since I don't know just what > > you're trying to accomplish; but you may want to move the loop out of > > the "accept". > > > -- Adam > > I need to poll the device every 3 seconds. If I move the loop outside > of the accept, won't it just call Send_Status_Req procedure one time, > then finish the task? No. If Send_Status_Req is in a loop, then it will call it in a loop. This is the same whether or not the loop is inside the accept or outside of it. The difference is that if it's inside the accept, it will hold up the task (which could be the main program, technically the "environment task") calling the entry being accepted, and if it's not inside the accept, it won't; but other than that, the behavior will be the same either way. I'm not clear on why you'd be confused about this (i.e. why you think it would call Send_Status_Req only once)---I suspect you may have some misconception about how tasks work, but I can't think what it might be, so if this is still confusing to you, you may need to explain a little more clearly what you're confused about, so that we can help clear up whatever misunderstanding you may have. > Surely there must be a mechanism similar to C's pthread that allows me > to start a thread and let it worry about itself, while the main thread > continues processing. That's pretty much what you're doing with tasks. Ada, however, doesn't specify whether tasking is implemented with threads or some other way---that's up to the implementor. I think threads is a popular way to implement tasks, though. > All I'm seeing here is that the task is run in > parallel to the other code in the Handle_Msg procedure. I'm not clear on what the difference is between this sentence and what you would *like* to happen. > I wan't that > procedure to finish up, and let the rest of the program continue to > run, all with Poll_For_Status running in the background. Did you try moving the loop out of the accept? If so, what happened? If it didn't work the way you anticipated, then how did it not work? -- Adam