Hello all
Thanks Łukasz for your reply! 
That explains the behavior. But then, shouldn't a thread also own the
thread function or will that lead to other issues?

Should the vapi binding be:
public static weak Thread create (owned ThreadFunc func, bool joinable)
throws ThreadError;

instdead of:
public static weak Thread create (ThreadFunc func, bool joinable) throws
ThreadError;

???

Then the closure handled by the thread will maybe not be freed too
early.

I really hope to clear all this because that looks like the only way to
pass some parameters to a threadfunction.
Regards, 
Jörn


Am Donnerstag, den 14.01.2010, 11:06 +0100 schrieb Łukasz Pankowski:
> JM <interfl...@gmx.net> 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
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to