comment quitter le blocage de la xlib est XNextEvent
Sous windows, le thread GUI appelle habituellement GetMessage à l'attente pour le message,
quand un autre thread utiliser PoseMessage mettre un message dans la file d'attente, puis le
Thread GUI sera de retour GetMessage (quit blocage).
Personne ne peut me dire, lorsque j'utilise XNextEvent sous XWindows à l'attente de la
cas, comment puis-je "réveil" le thread GUI dans un autre thread. Est-il une
API comme PoseMessage je peux utiliser ?.
Vous devez vous connecter pour publier un commentaire.
Pas. C'est pourquoi la plupart des cadres de l'INTERFACE utilisateur (Gtk, KDE, etc) utilisation personnalisée boucle principale pour être à l'écoute pour plus de sources d'événements.
En interne, XNextEvent utilise un socket, donc il appelle
select()
de savoir quand l'entrée est disponible. Si vous le pouvez: AppelerConnectionNumber(display)
pour obtenir le descripteur de fichier que vous devez passerselect()
Qui vous permet d'écouter plusieurs descripteurs de fichiers.
Exemple de code à partir http://www.linuxquestions.org/questions/showthread.php?p=2431345#post2431345
XMaskWindow,
êtes-vous familier avec qui? Mais il n'est jamais de me donner tout ce que j'ai posté ce sujet ici: stackoverflow.com/questions/33717635/...select()
devrait êtrex11_fd + 1
, pas 1. Deman 2 select
: >nfds
est le plus grand numéro de descripteur de fichier dans l'un des trois ensembles, plus de 1.Vous pouvez quitter le blocage XNextEvent, envoyez-vous un mannequin événement.
Dans un autre fil, vous pouvez le faire à la fin de la boucle:
XInitThreads
?Vous devez utiliser :
Bool XCheckMaskEvent(Affichage*, long, XEvent)
La
XCheckMaskEvent
fonction de recherche tout d'abord la file d'attente des événements, et ensuite tous les événements disponibles sur le serveur de connexion pour le premier évènement qui correspond le masque spécifié.S'il trouve une correspondance,
XCheckMaskEvent
supprime ce cas, la copie dans le spécifiéeXEvent
structure, et renvoieTrue
. Les autres événements stockés dans la file d'attente ne sont pas jetés.Si l'événement que vous avez demandé n'est pas disponible,
XCheckMaskEvent
retourneFalse
, et le tampon de sortie aura été vidés.