Re: Questions about GClosure


On Sunday, April 7, 2013, Juan Rafael García Blanco wrote:

Hello everybody,

I've a few questions about how closures should be used. I'm writing a GLib wrapper for OpenCL, and I feel the need to use callbacks. I'll try to explain what I don't understand about closures.

g_cclosure_new takes a pointer to user data as argument. This is passed to the callback in its last argument. But then, when I call g_closure_invoke() I need to pass a GValue array containing the arguments to the callback, and I guess user_data is included here. I see this as a redundant action, so my guess is I've got something wrong. I hope you can clarify this a little bit for me. I'll appreciate it.

you don't pass the user data when calling invoke(). the params[] array contains only the arguments you specified in the marshaller. the user data pointer that is then passed to the callback function is the one you used when creating the GClosure.

a side note: I would not use GClosure, especially if you're concerned about performance. the GValue boxing and unboxing can become a performance liability in critical paths. you should use function pointers directly, and if you need generic arguments, you can resort to varargs. if push come to shove, using libffi directly is another option at your disposal.



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]