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)
Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top