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=unavailable autolearn_force=no version=3.4.4 Path: eternal-september.org!reader01.eternal-september.org!reader02.eternal-september.org!news.eternal-september.org!mx02.eternal-september.org!feeder.eternal-september.org!goblin3!goblin.stu.neva.ru!news.netfront.net!not-for-mail From: T.G. Newsgroups: comp.lang.ada Subject: Abortable Timed Action Date: Thu, 31 Dec 2015 04:15:13 +0000 (UTC) Organization: Netfront http://www.netfront.net/ Message-ID: NNTP-Posting-Host: 66.230.230.230 X-Trace: adenine.netfront.net 1451535313 81337 66.230.230.230 (31 Dec 2015 04:15:13 GMT) X-Complaints-To: news@netfront.net NNTP-Posting-Date: Thu, 31 Dec 2015 04:15:13 +0000 (UTC) User-Agent: slrn/1.0.2 (Linux) Xref: news.eternal-september.org comp.lang.ada:28945 Date: 2015-12-31T04:15:13+00:00 List-Id: Hello everyone. Is there a better way to implement a timed action? I've tried the following : task type Timed_Action_Task is entry Exec_After (T : Duration); entry Cancel; entry Finish; end Timed_Action_Task; task body Timed_Action_Task is Timeout : Duration; begin loop select accept Exec_After (T : Duration) do Timeout := T; end Exec_After; select accept Cancel; or delay Timeout; Do_Something; end select; or accept Finish; exit; end select; end loop; end Timed_Action_Task; and then later something like Timed_Action.Exec_After (5.0); ... if Something_Changed then Timed_Action.Cancel; end if; it works, I've also tried, task body Timed_Action_Task is Timeout : Duration := Duration'Last; begin loop select accept Exec_After (T : Duration) do Timeout := T; end Exec_After; or accept Cancel; Timeout := Duration'Last; or accept Finish; exit; or delay Timeout; Do_Something; Timeout := Duration'Last; end select; end loop; end Timed_Action_Task; any other options? Regards, --- news://freenews.netfront.net/ - complaints: news@netfront.net ---