Gli eventi wxPython sono registrati in ordine?
-
06-07-2019 - |
Domanda
Se vengono pubblicati più eventi utilizzando wxPostEvent / wxCallAfter dallo stesso thread, ad es. al clic sul pulsante dovrebbero essere elaborati nello stesso ordine?
Nell'esempio seguente wx.Callafter è usato per pubblicare eventi, che alla fine chiameranno le funzioni di callback, saranno chiamati nello stesso ordine, in cui sono stati passati a wx.CallAfter
def onbutton(self, event):
wx.CallAfter(func1)
# some more code
wx.CallAfter(func2)
Soluzione
CallAfter pubblica gli eventi nella coda degli eventi e questi devono essere elaborati in ordine. Tuttavia, vengono elaborati su eventi inattivi, non in base al completamento della funzione, quindi la funzione to2 potrebbe essere elaborata prima che funzioni1 a seconda della tempistica degli eventi inattivi (ad es. Wx.Yield, ecc.) C'è una discussione su un problema con questo qui e sembra che possa essere una specie di ingannevole.
Altri suggerimenti
Credo che dovrebbe essere garantito. Ho un po 'di codice che prende i dati dalla porta seriale in un thread e genera eventi che WX può gestire. Anche quando si ricevono dati a 115kbps - dove indubbiamente si scatenerebbero diversi eventi prima che vengano elaborati - i dati vengono visualizzati in ordine quando wx chiama il mio gestore per stampare / disconnettersi.