while (true)
wait_for_events
handle_events
Fondamentalement, boucle d'événements non bloquant utilise dispositif qui permet d'attendre plusieurs événements en même temps (select
/poll
sous UNIX, WaitForMultipleEvents
sous Windows, sous Linux epoll
kqueue
sur FreeBSD, etc.). Dans chaque itération de la boucle principale, les événements (descripteurs de fichiers, timers, etc.) sont enregistrés dans un type de handle. Ensuite, une fonction qui attend des événements (par exemple, select
) est appelée. Cela retourne généralement tous les événements qui se sont produits lors de l'appel de cette fonction. Enfin, la boucle gère ces événements, généralement en appelant des rappels associés à des événements.
Pour plus de détails, voir implémentation de libevent ou de certaines boucles d'événements de la boîte à outils GUI - GTK + ou Qt.
Ceci est similaire à une autre question à laquelle j'ai répondu il y a quelque temps: http://stackoverflow.com/questions/80617/asychronous-programming-in-python-twisted/81456#81456 – Glyph