[Gambas-user] Callbacks in Gambas (was Re: Signal management)
Doriano Blengino
doriano.blengino at ...1909...
Wed Jul 14 17:37:00 CEST 2010
Benoît Minisini ha scritto:
>>>> Nice thing. But now I have a further question: is it possible to
>>>> implement generic callbacks in Gambas?
>>>> I mean - many libraries have functions where you specify a callback to
>>>> be called, like the glib function g_signal_connect(); it would be nice
>>>> to implement them, even partly, without resorting to write a gambas
>>>> component. May be that by using libffi it is possible to implement them
>>>> fully, but even a simple event could do. My problem now is that using
>>>> ALSA, I must poll continuously to see if some event is coming in,
>>>> wasting a lot of CPU and losing precision. With a callback if would be
>>>> much simpler...
>>>>
>>>> I hope I have been clear enough.
>>>>
>>>> Regards,
>>>> Doriano
>>>>
>>> It is possible, I will trying to do that. There is a lot of magic
>>> involved behind that, hopefully handled by the libffi library.
>>>
>>> Alas, that library is not very well documented, so it will take a little
>>> time, and I'm not 100% sure it will work as expected.
>>>
>>> Regards,
>>>
>> You should be happy with revision #3040.
>>
>> Regards,
>>
> Some little information about callbacks:
>
> If you want to use a Gambas function as a callback for an extern function, you
> just have to:
>
> 1) Declare the extern function argument that will receive the function address
> as "Pointer".
>
> 2) Use the Gambas function name when calling the extern function.
>
> Note that you can use any private or public Gambas function. You can even use
> non-static methods: but beware that the object the method applies on is
> captured by the callback, and released at the end of the program only.
>
So if I have:
int setcallback(callback_t yourfunc, int tag);
I must declare:
EXTERN setcallback(afunc as pointer, tag as integer) as integer
private sub mycallback(tag as integer)
...
END
...
setcallback(mycallback, 25)
Is it right?
> Waiting for your returns!
>
I must download this last revision of gambas, and compile it. I never
tried to do it. How do I download it? Possibly without SVN? Can it work
without QT4? I would prefer not to mess up my machine... (fanatic of
"stable" repositories...).
Can you advice?
Thanks,
Doriano
More information about the User
mailing list