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
next 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