[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