[chuck-users] implementing a "wait for signal with timeout"
Tom Lieber
tom at alltom.com
Mon Jun 8 18:18:56 EDT 2009
On Mon, Jun 8, 2009 at 1:53 PM, Robert Poor<rdpoor at gmail.com> wrote:
> In real-time music making, sometimes you want to wait for a signal (e.g.
> event.broadcast()) OR for a specific time to elapse, whichever comes first.
I don't re-use shreds, but I think this is useful anyway:
---
class NoteEvent extends Event {
0 => int sent;
}
public class Timeout {
fun Event either(Event ev, dur d) {
NoteEvent real;
spork ~ time_alert(real, d);
spork ~ event_alert(real, ev);
return real;
}
fun void time_alert(NoteEvent real, dur d) {
d => now;
if(!real.sent)
real.broadcast();
1 => real.sent;
}
fun void event_alert(NoteEvent real, Event ev) {
ev => now;
if(!real.sent)
real.broadcast();
1 => real.sent;
}
}
---
It's used like:
Timeout tout;
tout.either(some_event, 3::second) => now;
--
Tom Lieber
http://AllTom.com/
More information about the chuck-users
mailing list