Il s'agit d'un sujet général, comment fonctionnent les gestionnaires d'événements?
Cela signifie dans les coulisses - ce qui se passe quand ils sont créés.
J'ai une idée approximative - mais j'aimerais qu'elle soit confirmée.
event-programming
implementations
JHarley1
la source
la source
Réponses:
À un niveau inférieur, les gestionnaires d'événements fonctionnent souvent en interrogeant un périphérique et en attendant une interruption matérielle. Essentiellement, un thread d'arrière-plan se bloque, en attendant qu'une interruption matérielle se produise. Lorsqu'une interruption se produit, la fonction d'interrogation cesse de bloquer. L'application peut alors savoir quelle poignée de périphérique a provoqué l'interruption et de quel type d'interruption il s'agissait, puis agir en conséquence (par exemple en appelant une fonction de gestionnaire d'événements). Cela se fait généralement dans un thread séparé afin que cela se fasse de manière asynchrone.
Bien sûr, la façon dont cela est réellement mis en œuvre varie considérablement en fonction du système d'exploitation et du type d'appareil / d'entrée. Sur les systèmes UNIX, les gestionnaires d'événements sont implémentés pour des choses comme les sockets, les ports série ou USB via les appels système select ou poll . Un ou plusieurs descripteurs de fichier / périphérique (qui sont associés à un périphérique, comme une prise réseau, un port série / USB, etc.) sont transmis à l'
poll
appel système - qui est mis à la disposition du programmeur via une API C de bas niveau. Lorsqu'un événement se produit sur l'un de ces appareils (comme, par exemple, certaines données arrivent sur un port série), l'appel du système d'interrogation cesse de se bloquer et l'application peut alors déterminer quel descripteur d'appareil a provoqué l'événement et de quel type d'événement il s'agissait. .Sous Windows, cela est géré différemment, mais les concepts sont fondamentalement les mêmes.
la source