0

我们有一个项目,其核心功能使用 ACE 实现,并围绕它的 Reactor 构建。我们想使用 Wt 添加一个小型 Web 界面。

那么问题来了,能不能把wt接口的主循环换成ace反应器呢?

我想到的唯一坏主意是在 Reactor 端有一个快速计时器,它以某种方式调用 wt 部分。反过来,反应器可以使用它的 handle_events 方法“逐个滴答”运行,但我在 wt 端找不到等效项。

注意:这个问题背后的主要问题是关于线程。我们没有线程,代码不是线程安全的,如果 HMI 可以与应用程序的其余部分运行在同一个线程上,对我们来说会简单很多。但是有 2 个阻塞调用,一个对 theReactor->run_reactor_event_loop(),另一个对 Wt::WRun() 是一个问题!

4

1 回答 1

0

这可以对 Wt 连接器进行一些修改。Wt 可以在没有线程支持的情况下编译,因此在连接器中必须有某种 select() 循环。您需要的是能够使用计时器连接到该循环。

你说的是http连接器吗?这是用 boost.asio 实现的,所以你可能只需要一个带有 async_wait 的 asio deadtime_timer 来执行 theReactor->run_reactor_event_loop() 。当您深入研究 boost.asio 文档时,您甚至可能会发现不同的想法...

它甚至可以在不修改连接器的情况下工作。它没有记录,但 Server::instance()->service() (在 src/http/Server.h 中)会返回您实现此功能所需的 asio 服务。

更多信息 -> Wt 的邮件列表?

于 2011-05-26T16:28:22.360 回答