[chuck-users] implementing a "wait for signal with timeout"

Robert Poor rdpoor at gmail.com
Mon Jun 8 18:55:27 EDT 2009


Tom:

Very clean!!  And probably not too hard to modify for re-usable  
shreds.  I'll report back.

- Rob

On 8 Jun 2009, at 15:18, Tom Lieber wrote:

> 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/
> _______________________________________________
> chuck-users mailing list
> chuck-users at lists.cs.princeton.edu
> https://lists.cs.princeton.edu/mailman/listinfo/chuck-users



More information about the chuck-users mailing list