События wxPython размещены в порядке? - PullRequest
1 голос
/ 27 октября 2009

Если несколько событий публикуются с использованием wxPostEvent / wxCallAfter из одного потока, например при нажатии кнопки они должны обрабатываться в том же порядке?

В приведенном ниже примере wx.Callafter используется для публикации событий, которые в конечном итоге будут вызывать функции обратного вызова, будут ли они вызываться в том же порядке, в котором они были переданы в wx.CallAfter

def onbutton(self, event):
    wx.CallAfter(func1)
    # some more code
    wx.CallAfter(func2)

Ответы [ 2 ]

1 голос
/ 28 октября 2009

CallAfter отправляет события в очередь событий, и они должны обрабатываться по порядку. Тем не менее, они обрабатываются на событиях бездействия, а не на основе завершения функции, поэтому func2, который необходимо обработать до выполнения func1, зависит от времени событий бездействия (например, wx.Yield и т. Д.). Существует обсуждение этой проблемы. здесь , и кажется, что это может быть довольно сложно.

0 голосов
/ 28 октября 2009

Я считаю, что это должно быть гарантировано. У меня есть некоторый код, который захватывает данные из последовательного порта в потоке и запускает события для обработки wx. Даже при получении данных со скоростью 115 кбит / с - где, несомненно, произойдет запуск нескольких событий до их обработки - данные отображаются в порядке, когда wx вызывает мой обработчик для печати / выхода из системы.

...