Les événements wxPython sont-ils affichés dans l'ordre?
-
06-07-2019 - |
Question
Si plusieurs événements sont publiés à l'aide de wxPostEvent / wxCallAfter à partir du même fil, par exemple. sont-ils supposés être traités dans le même ordre lors d’un clic sur un bouton?
Dans l'exemple ci-dessous, wx.Callafter est utilisé pour publier des événements, qui appeleront ultérieurement les fonctions de rappel, seront-ils appelés dans le même ordre, dans lequel ils ont été transmis à wx.CallAfter
def onbutton(self, event):
wx.CallAfter(func1)
# some more code
wx.CallAfter(func2)
La solution
CallAfter poste les événements dans la file d'attente et ceux-ci doivent être traités dans l'ordre. Néanmoins, ils sont traités lors des événements inactifs, et non en fonction de l'achèvement de la fonction, de sorte que la fonction func2 puisse être traitée avant que l'opération ne soit terminée, en fonction du moment choisi pour les événements inactifs (par exemple, wx.Yield, etc.). ici , et il semble que cela puisse être en quelque sorte délicat.
Autres conseils
Je crois que cela devrait être garanti. J'ai un code qui récupère les données du port série dans un thread et déclenche des événements que wx peut gérer. Même lors de la réception de données à 115 kbps - où il se déclencherait sans aucun doute plusieurs événements avant leur traitement - les données s'affichent dans l'ordre lorsque wx appelle mon gestionnaire pour imprimer / déconnecter les données.