GB.Post
void GB.Post ( void (*func)() , long param )
Poste une routine de rappel (callback) qui sera appelée lors de la prochaine boucle d’évènement.
-
func est l’adresse du rappel.
-
param est un entier long qui sera passé au rappel.
Utilisez cette fonction si vous ne pouvez pas exécuter une partie de code immédiatement.
Par exemple, il est parfois dangereux de déclencher un évènement immédiatement,
Car le gestionnaire d’évènement peut indirectement libérer une partie de mémoire utilisée par une fonction située plus haut dans la pile. Mieux vaut parfois déclencher l’évènement quand vous êtes au sommet de la boucle d’évènement.
Si vous voulez utiliser un objet dans le rappel, vous devez le référencer avec
GB.Ref, pour éviter que l’interpréteur ne le détruise avant que le rappel ne soit invoqué. Et n’oubliez pas d’appeler
GB.Unref dans la routine post une fois que vous en avez terminé avec l’objet!
Par exemple, GB.Post est utilisé pour déclencher les évènements Click quand vous sélectionnez un menu, parce que déclencher l’évènement immédiatement dans le connecteur QT crashe l’interpréteur!
Cette fonction appelle le connecteur post de l’interpréteur pour qu’il sache qu’une nouvelle routine post a été enregistrée.
Exemples
// Voilà comment les évènements du menu sont envoyés au composant QT
static void send_menu_event(CMENU *menu)
{
GB.Raise(menu, EVENT_Click, 0);
GB.Unref((void **)&menu);
}
void CMenu::activated(int id)
{
CMENU *menu = ... ;
// Ne pas déclencher immédiatement l’évènement
// GB.Raise(menu, EVENT_Click, NULL);
GB.Ref(menu);
GB.Post((void (*)())send_menu_event, (long)menu);
}
Voir aussi