Объединение двух циклов событий (Cherrypy и Wxpython)

1

Хорошо, у меня есть приложение, написанное с помощью cherrypy, и я хочу создать для него wxpython gui. Проблема в том, что оба модуля используют замкнутый цикл для обработки событий, который (я предполагаю) означает, что при запуске другой будет заблокирован.

Я попросил совета, и мне было предложено объединить два цикла событий, а не использовать точки входа запаса (quickloop() для cherrypy и MainLoop() для wx)

Проблема в том, что я понятия не имею, как это сделать. Любые советы были бы с благодарностью.

Теги:
cherrypy
wxpython

2 ответа

6

Вы уже задали один и тот же вопрос: cherrypy и wxpython, и я дал вам лучший ответ, который вы найдете где угодно, который был проголосован и вы одобрили, по-видимому. Почему вы снова спрашиваете?

0

В случае черри, у вас есть источник. Посмотрите в коде, что делает quickloop(), а затем попытайтесь объединить этот код с MainLoop() WX.

Оба цикла, вероятно, будут выглядеть так:

while (true) {
    if (pendingEvents()) processEvents ();
    else waitForEvents ();
}

Вы должны найти способ объединить два ожидающих вызова в один (так что код будет продолжаться, если у какого-либо источника события были ожидающие события). Для WX посмотрите Dispatch(), Pending() и ProcessIdle().

Или вы можете посмотреть wxIdleEvent (см. документы) и обработать все вишневые события там.

Другим решением может быть запуск двух циклов в разных потоках. В этом случае вы не можете вызывать методы WX из вишневого кода и наоборот. Чтобы решить эту проблему, вы должны найти способ отправить сообщения в другой поток со всей информацией, какой метод вызывать. Это гарантирует, что WX-методы будут выполняться в потоке WX, а методы cherrypy будут выполняться в вихревом потоке.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню