All pastes #1568648 Raw Edit

Anonymous

public text v1 · immutable
#1568648 ·published 2009-09-16 18:13 UTC
rendered paste body
MainLoop loop;

public class CommandBundle
{
    public SourceFunc callback;
}

public class Test
{
    GLib.Queue<CommandBundle> q;
    uint watch;

    public Test()
    {
        q = new GLib.Queue<CommandBundle>();
    }

    public async void enqueue()
    {
        if (q.length == 0)
            watch = Idle.add( processQueue );

        message( "callback = %p", (void*)enqueue.callback );
        CommandBundle bundle = new CommandBundle() { callback=enqueue.callback };
        message( "callback = %p", (void*)bundle.callback );
        assert( enqueue.callback == bundle.callback );
        q.push_tail( bundle );
    }

    public bool processQueue()
    {
        var bundle = q.pop_head();
        var empty = q.length == 0;
        if (empty && watch > 0)
        {
            Source.remove( watch );
            watch = 0;
            return false; // don't call again
        }
        return true; // call me again
    }
}

void main()
{
    loop = new MainLoop( null, false );
    var t = new Test();
    t.enqueue();
    loop.run();
}