21. Programmation avancée
{
Console.WriteLine("Nouveau module
}
L'initialisation
Vous devez ensuite signaler à l'API qu'il faut appeler votre callback quand un nouveau module est
branché.
YAPI.RegisterDeviceArrivalCallback(deviceArrival);
Notez que si des modules sont déjà branchés lorsque le callback est enregistré, le callback sera
appelé pour chacun de ces modules déjà branchés.
Déclenchement des callbacks
Un problème classique de la programmation par callbacks est que ces callbacks peuvent être
appelés n'importe quand, y compris à des moments où le programme principal n'est pas prêt à les
recevoir, ce qui peut avoir des effets de bords indésirables comme des dead-locks et autres
conditions de course. C'est pourquoi dans l'API Yoctopuce, les callbacks d'arrivée/départs de
modules ne sont appelés que pendant l'exécution de la fonction
suffit d'appeler
UpdateDeviceList()
spécifique pour controller précisément quand les appels à ces callbacks auront lieu:
// boucle d'attente gérant les callback
while (true)
{
// callback d'arrivée / départ de modules
YAPI.UpdateDeviceList(ref errmsg);
// attente non active gérant les autres callbacks
YAPI.Sleep(500,
}
De manière similaire, il est possible d'avoir un callback quand un module est débranché. Vous
trouverez un exemple concret démontrant toutes ces techniques dans la librairie de programmation
Yoctopuce de chaque langage. L'exemple se trouve dans le répertoire Examples/Prog-EventBased.
Attention: dans la plupart des langages, les callbacks doivent être des procédures globales, et non
pas des méthodes. Si vous souhaitez que le callback appelle une méthode d'un objet, définissez
votre callback sous la forme d'une procédure globale qui ensuite appellera votre méthode.
158
: "
à intervalle régulier depuis un timer ou un thread
ref errmsg);
+ m.get_serialNumber());
UpdateDeviceList()
. Il vous
www.yoctopuce.com