Callbacks are used extensively in asynchronous systems. Libraries such as libevent provide a powerful asynchronous core to process events. Let's build an example to set a C function as a callback into a Python backend, which will notify back again into the C code. Firstly, we will declare a public callback function typedef
:
cdef public: ctypedef void (*callback)(int)
This will output a callback typedef
. Next, we can declare a global callback on the stack:
cdef callback GlobalCallback
Once this is set, we can then notify the callback
easily. Next, we need a way to set the callback
and another to call the callback
:
cdef public void SetCallback(callback cb): global GlobalCallback GlobalCallback = cb
Notice the global
keyword from Python through which the compiler knows to use the global
keyword and not create a temporary instance from within that suite:
cdef public void Notify(int value): global GlobalCallback if GlobalCallback != <callback>...