GB.Post
void GB.Post ( void (*func)() , long param )
Post a callback routine that will be called at the next event loop.
-
func is the address of the callback.
-
param is a long integer that will be pass to the callback.
Use this function if you can't execute a piece of code immediately.
For example, it is often dangerous to raise an event immediately,
as the event handler may indirectly free some memory used
by a function higher in the stack. So it is sometimes better to raise
the event when you are on top of the event loop.
If you want to use an object in the callback, you must reference it with
GB.Ref, to prevent the
interpreter destroying it before the callback is called. And do not forget to call
GB.Unref once
you have finished with the object in the post routine!
For example, GB.Post is used for raising Click events when you select a menu, because
raising the event immediately in the QT slot crashes the interpreter !
This function calls the post interpreter hook so that it knows that a new post routine has been
registered.
Examples
// This is how menu event are sent in the QT component
static void send_menu_event(CMENU *menu)
{
GB.Raise(menu, EVENT_Click, 0);
GB.Unref((void **)&menu);
}
void CMenu::activated(int id)
{
CMENU *menu = ... ;
// Don't send the event immediately
// GB.Raise(menu, EVENT_Click, NULL);
GB.Ref(menu);
GB.Post((void (*)())send_menu_event, (long)menu);
}
See also