如何用ACE_Reactor替换WT的主回路

How to replace WT's main loop with an ACE_Reactor

本文关键字:WT 回路 替换 Reactor 何用 ACE      更新时间:2023-10-16

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

所以问题是,有可能用ace反应器取代wt界面的主回路吗?

我想到的唯一坏主意是在反应堆一侧安装一个快速计时器,它会以某种方式调用wt部分。反过来,reactor可以使用它的handle_events方法"一个接一个"地运行,但我在wt方面找不到等效的方法。

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

这可以通过对Wt连接器进行一些修改来工作。Wt可以在没有线程支持的情况下编译,因此在连接器中必须有某种select()循环。你所需要的是能够用计时器钩住这个循环。

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

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

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