Вопрос

Если несколько событий публикуются с использованием 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 вызывает мой обработчик для печати / выхода из данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top