Utilisation des événements
L’interface utilisateur de l’événement n’a pas été finalisé dans Firebird 4.0, nous nous attendons à ce qu’il y ait quelque chose de plus intéressant dans la prochaine version. Le support minimum existant est le suivant : IAttachment
contient la méthode queEvents()
, qui remplit presque les mêmes fonctions que l’appel isc_que_events()
.Au lieu de la paire de paramètres FPTR_EVENT_CALLBACK ast
et void* arg
nécessaires pour appeler le code utilisateur lorsqu’un événement se produit dans Firebird, l’interface de rappel IEventCallback
est utilisée. Il s’agit d’une approche traditionnelle qui permet d’éviter les appels vide* dangereux dans une fonction personnalisée. Une autre différence importante est qu’au lieu d’un identificateur d’événement (une sorte de gestionnaire), cette fonction renvoie une référence à l’interface IEvents
, qui a une méthode cancel()
utilisée pour arrêter l’événement d’écoute. Contrairement à l’identifiant, qui est détruit automatiquement à l’arrivée d’un événement, une interface ne peut pas être détruite automatiquement si l’événement est reçu juste avant l’appel de la méthode cancel()
, cela provoquera une erreur de segmentation car l’interface sera déjà détruite. Par conséquent, une fois l’événement reçu, l’interface IEvents
doit être explicitement libérée. Cela peut être fait, par exemple, juste avant de demander un événement à la file d’attente:
events->release();
events = NULL;
events = attachment->queEvents(&status, this, eveLen, eveBuffer);
Définir le pointeur de l’interface à NULL
est utile en cas d’exception dans queEvents
. À d’autres égards, la gestion des événements n’a pas changé par rapport à l’API ISC. Pour plus d’informations, utilisez notre exemple 08.events.cpp
.