JM <[email protected]> writes:
> If I do the same thing with an Idle, the behavior is significantly
> different, as the block data is not destroyed as soon as the run()
> function is left. Why is that?
>
> Well working example:
>
> class HHH : Object {
> public void run() {
> string test = "test";
> Idle.add(() => { print("in idle : %s \n", test); return
> false;});
if you look into glib-2.0.vapi Idle.add is declared as:
public static uint add (owned SourceFunc function, [CCode (pos
= 0.1)] int priority = Priority.DEFAULT_IDLE);
so the add() is declared to own the function past to it, so the closure data
will be kept alive
> }
>
> public static MainLoop loop;
>
> public static int main() {
> loop = new MainLoop(null, false);
> var h = new HHH();
> h.run();
> h.run();
> h.run();
> h.run();
> loop.run();
> return 0;
> }
> }
>
> // valac closuretest.vala
_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list