Pregunta

Si se publican múltiples eventos usando wxPostEvent / wxCallAfter desde el mismo hilo, p. al hacer clic en el botón, ¿se supone que deben procesarse en el mismo orden?

En el siguiente ejemplo, wx.Callafter se utiliza para publicar eventos, que eventualmente llamarán a las funciones de devolución de llamada, se llamarán en el mismo orden, en el que se pasaron a wx.CallAfter

def onbutton(self, event):
    wx.CallAfter(func1)
    # some more code
    wx.CallAfter(func2)
¿Fue útil?

Solución

CallAfter publica los eventos en la cola de eventos y estos deben procesarse en orden. Aún así, se procesan en eventos inactivos, no se basan en la finalización de la función, por lo que el func2 podría procesarse antes de que se realice func1 dependiendo del momento de los eventos inactivos (por ejemplo, wx.Yield, etc.) Hay una discusión sobre un problema con esto aquí , y parece que puede ser una especie de complicado.

Otros consejos

Creo que debería estar garantizado. Tengo un código que toma datos del puerto serie en un hilo y dispara eventos para que wx los maneje. Incluso cuando recibe datos a 115 kbps, donde indudablemente dispararía varios eventos antes de que se procesen, los datos aparecen en orden cuando wx llama a mi controlador para imprimir / cerrar la sesión de datos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top