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

mike clemow gelfmuse at gmail.com
Tue Jun 9 13:13:12 EDT 2009


I like this a lot!

"Very clean!!" --> It's my contention that it looks "clean" because it
doesn't bother to reuse threads, er shreds.  All I'm saying is that I
spawn tens of thousands of shreds that don't get reclaimed and I never
leak enough memory to do damage during a concert.  But that's just me.

-Mike

On Mon, Jun 8, 2009 at 6:18 PM, Tom Lieber<tom at alltom.com> 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
>



-- 
http://michaelclemow.com
http://semiotech.org


More information about the chuck-users mailing list