События wxPython размещены в порядке?
-
06-07-2019 - |
Вопрос
Если несколько событий публикуются с использованием wxPostEvent / wxCallAfter из одного потока, например, при нажатии кнопки они должны обрабатываться в том же порядке?
В приведенном ниже примере wx.Callafter используется для публикации событий, которые в конечном итоге будут вызывать функции обратного вызова, будут ли они вызываться в том же порядке, в котором они были переданы в wx.CallAfter
def onbutton(self, event):
wx.CallAfter(func1)
# some more code
wx.CallAfter(func2)
Решение
CallAfter отправляет события в очередь событий, и они должны обрабатываться по порядку. Тем не менее, они обрабатываются на событиях бездействия, а не на основе завершения функции, поэтому func2, который необходимо обработать до выполнения func1, зависит от времени событий бездействия (например, wx.Yield и т. Д.). Существует обсуждение этой проблемы. здесь , и кажется, что это может быть своего рода сложно.
Другие советы
Я считаю, что это должно быть гарантировано. У меня есть некоторый код, который захватывает данные из последовательного порта в потоке и запускает события для обработки wx. Даже при получении данных со скоростью 115 кбит / с, где, несомненно, произойдет запуск нескольких событий перед их обработкой, - данные отображаются в том порядке, когда wx вызывает мой обработчик для печати / выхода из данных.