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)
È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top