comp.lang.ada
 help / color / mirror / Atom feed
From: simon_the_softy@hotmail.com (Simon Apperley)
Subject: Elegant 'abort' of sleeping task
Date: 31 Mar 2003 05:18:20 -0800
Date: 2003-03-31T13:18:22+00:00	[thread overview]
Message-ID: <310b040f.0303310518.76dc9bf7@posting.google.com> (raw)

Hi,

I'm looking at the design of a piece of server code which has to
handle calls that also pass a timeout value. The target system is
aerospace related, and dynamically creating tasks 'on the fly' just is
not an option.

I want to be able to set up a single task to handle the timeout from
the head of a delta-queue of timeouts, but have found a problem. If I
have the timeout implemented as a task stuck in a 'delay' call, and a
more immediate timeout comes in, I want to wake up the sleeping task,
re-calculate the delta-queue and then sleep on the new, shorter,
delay. So far the only way I can see to do this is to use abort, and
set up the task again, which seems a bit of a brute force approach.

Has anyone got any suggestions on how I can interrupt the sleep call,
without using a polling approach that would just consume CPU time at
the expense of the other code in the system.

I could use direct calls to the underlying RTOS, but I'd rather keep
as much as possible within the Ada language.

I did wonder about delay until TIME, and having another task change
TIME, but that seems rather un-safe to me as it starts making
assumptions about the underlying run-time implementation.

Thanks

Simon Apperley @ General Dynamics UK COM



             reply	other threads:[~2003-03-31 13:18 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-03-31 13:18 Simon Apperley [this message]
2003-03-31 13:28 ` Elegant 'abort' of sleeping task Lutz Donnerhacke
2003-03-31 16:04 ` Jeffrey Carter
2003-04-01 12:02   ` Dmitry A. Kazakov
2003-03-31 16:49 ` David C. Hoos
2003-04-01 16:20 ` David C. Hoos
2003-04-01 16:26 ` Nick Roberts
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox