On Thu, January 14, 2010 01:12, JM wrote: > Hi Ĺukas > Thanks for your reply! This somehow does not work as soon as I add > another thread. > > class HHH : Object { > private ThreadFunc f; > public void run() { > string test = "test"; > try { > f = ()=> { print("in thread : %s \n", test); };
When you call this second time, you *replace* the closure created the first time around, causing it to be deleted. Than it's memory probably gets reused when creating the thread (in the first post you didn't do any allocation after the thread was created, so there was nothing to overwrite the data), causing the first thread to fail. You need to have one variable for each closure you create, or a collection of them. Note, that delegates are not compatible with generics, but you can wrap them in class instances and those are. I don't know whether explicit boxing (append ? to the type - does the trick with double and struct types) is supported for delegates or not. > Thread.create(f, false); > } > catch(GLib.ThreadError e) { > print("%s", e.message); > } > } > > public static MainLoop loop; > > public static int main() { > loop = new MainLoop(null, false); > var h = new HHH(); > h.run(); > h.run(); // Another thread > loop.run(); > return 0; > } > } > > // valac --thread hhh.vala > > I get: > > $./hhh > in thread : test > in thread : (null) > > Ideas? > Regards, > JĂśrn -- - Jan Hudec <b...@ucw.cz> _______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list