Публикуются ли события wxPython по порядку?

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

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

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

person Anurag Uniyal    schedule 27.10.2009    source источник


Ответы (2)


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

person tom10    schedule 28.10.2009
comment
Я также отправил тот же вопрос в список рассылки wxpython, у Робин есть хороший ответ groups.google.com/group/wxpython-users/browse_thread/thread/ - person Anurag Uniyal; 28.10.2009
comment
Да, Робин - хороший ответ. Тем не менее, стоит взглянуть на эту часть темы, на которую я ссылался: aspn .activestate.com/ASPN/Mail/Message/wxpython-users/3483407 . Здесь это не просто очевидный оператор Yield или менее очевидный диалог модели, но также и событие рисования, потому что оно поставлено в очередь не по порядку. - person tom10; 28.10.2009

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

person Nick T    schedule 27.10.2009