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=-0.9 required=5.0 tests=BAYES_00,FORGED_GMAIL_RCVD, FREEMAIL_FROM autolearn=no autolearn_force=no version=3.4.4 X-Google-Thread: 103376,470e89e7a6575920,start X-Google-Attributes: gid103376,domainid0,public,usenet X-Google-Language: ENGLISH,ASCII-7-bit Path: g2news1.google.com!postnews.google.com!y21g2000hsf.googlegroups.com!not-for-mail From: Maciej Sobczak Newsgroups: comp.lang.ada Subject: Periodic tasks - organization Date: Sun, 13 Jul 2008 14:47:53 -0700 (PDT) Organization: http://groups.google.com Message-ID: <86589099-2e4e-4b7d-ace0-6f1f864a3fa2@y21g2000hsf.googlegroups.com> NNTP-Posting-Host: 85.3.227.134 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit X-Trace: posting.google.com 1215985673 3373 127.0.0.1 (13 Jul 2008 21:47:53 GMT) X-Complaints-To: groups-abuse@google.com NNTP-Posting-Date: Sun, 13 Jul 2008 21:47:53 +0000 (UTC) Complaints-To: groups-abuse@google.com Injection-Info: y21g2000hsf.googlegroups.com; posting-host=85.3.227.134; posting-account=bMuEOQoAAACUUr_ghL3RBIi5neBZ5w_S User-Agent: G2/1.0 X-HTTP-UserAgent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.5; en-US; rv:1.9) Gecko/2008061004 Firefox/3.0,gzip(gfe),gzip(gfe) Xref: g2news1.google.com comp.lang.ada:1139 Date: 2008-07-13T14:47:53-07:00 List-Id: Consider a program that has a couple of periodic tasks. Let's say there are two tasks, one with a period of 3s and another with a period of 4s. Let's say that exact triggering is not required. The simplest way to do it is to just have appropriate delay statements in main loops of these tasks. The advantage of such a setup is that the tasks are completely self-contained and independent on any other program entity. The disadvantage is that they are bound to the way their periodicity is implemented. Another way is to have additional task that will serve as a clock, "ticking" two protected objects that are countdown counters with single entry that waits for the counter to reach zero. In this case the tick would be 1s, as the greatest common divisor of two periods. The working tasks can then wait on respective entries in these protected objects, which are released when the counters reach zero. The advantage of this approach is that the notion of time is extracted from the working tasks themselves and can be easily changed to something else, like waiting on a different kind of clock or an interrupts or whatever without disturbing main working tasks. The disadvantage is that there are more program entities (+ two protected countdowns + 1 ticking task) to handle. What can you say about these two approaches? Which would you recommend and when? -- Maciej Sobczak * www.msobczak.com * www.inspirel.com