[chuck-users] implementing a "wait for signal with timeout"
Robert Poor
rdpoor at gmail.com
Mon Jun 8 17:45:36 EDT 2009
So as presaged, this is a schematic of how I've implemented "wait for
signal or timeout".
First, I have a "PermaShred" class: a call to:
PermaShred.run_process(this);
calls a do_process() function (which you subclass) in its own thread,
er, shred. When your do_process() function returns, the shred is
returned to a resource pool, making it available to the next call to
PermaShred.run_process(). That's my basic mechanism for not leaking
shreds.
To build wait_for_signal_or_timeout(event E, time T) functionality, I
spawn, er, spork a PermaShred "watchdog" that waits until time T
arrives, and then does a E.broadcast(). In the meantime, the caller
simply blocks on event E. As a result, the caller will return if
anyone does a broadcast on E OR if the watchdog process times out.
It's a bit convoluted -- among other nuances, the watchdog shred needs
to be careful about signaling after the caller has moved on -- but it
does the job. And it doesn't leak memory after an initial pool of
PermaShred objects have been allocated.
If anyone wants to see the code, let me know.
- Rob
More information about the chuck-users
mailing list