Как заменить основной цикл WT на ACE_Reactor - PullRequest
0 голосов
/ 24 мая 2011

У нас есть проект с основной функциональностью, реализованной с использованием ACE и построенной вокруг его Reactor. Мы хотим добавить небольшой веб-интерфейс, используя Wt.

Таким образом, вопрос в том, можно ли заменить основной контур интерфейса wt на реактор с ацетилом?

Единственная плохая идея, которая приходит мне в голову - это быстрый таймер на стороне Reactor, который каким-то образом вызывает весовую часть. С другой стороны, реактор можно запустить «тик за тик», используя метод handle_events, но я не могу найти эквивалент на стороне wt.

примечание: Основная проблема, стоящая за этим вопросом, связана с темами. У нас нет потоков, код не является потокобезопасным, и нам было бы намного проще, если бы HMI мог работать в том же потоке, что и остальная часть приложения. Но наличие 2 блокирующих вызовов, одного для Reactor-> run_reactor_event_loop (), а другого для Wt :: WRun (), является проблемой!

1 Ответ

0 голосов
/ 26 мая 2011

Это может работать с некоторыми модификациями разъема Wt. Wt может быть скомпилирован без поддержки потоков, поэтому в коннекторе должна быть какая-то петля select (). Что вам нужно, так это возможность подключиться к этому циклу с помощью таймера.

Вы говорите о коннекторе http? Это реализовано с boost.asio, так что asio deadline_timer с async_wait, который выполняетReactor-> run_reactor_event_loop (), может быть всем, что вам нужно. Может быть, вы даже найдете другую идею, когда погрузитесь в документацию по boost.asio ...

Может работать даже без изменений в разъеме. Это не задокументировано, но Server :: instance () -> service () (в src / http / Server.h) возвращает вам службу asio, необходимую для ее реализации.

Подробнее -> Список рассылки Wt?

...