0

ACE を使用して実装されたコア機能を備えたプロジェクトがあり、その Reactor を中心に構築されています。Wt を使用して小さな Web インターフェイスを追加したいと考えています。

問題は、wt インターフェイスのメイン ループを ace リアクターに置き換えることは可能かということです。

私の頭に浮かぶ唯一の悪い考えは、どういうわけかwt部分を呼び出すReactor側に高速タイマーがあることです。逆に、リアクターは handle_events メソッドを使用して「ティックごと」に実行できますが、wt 側で同等のものを見つけることができません。

注: この質問の背後にある主な関心事は、スレッドに関するものです。スレッドはありません。コードはスレッド セーフではありません。HMI がアプリケーションの残りの部分と同じスレッドで実行できれば、はるかに簡単になります。しかし、1 つは theReactor->run_reactor_event_loop() への呼び出し、もう 1 つは Wt::WRun() への 2 つのブロッキング呼び出しがあるのは問題です!

4

1 に答える 1

0

これは、Wt コネクタにいくつかの変更を加えることで機能します。Wt はスレッド サポートなしでコンパイルできるため、コネクタには何らかの select() ループが必要です。必要なのは、タイマーを使用してそのループにフックする機能です。

httpコネクタについて話しているのですか?これはboost.asioで実装されているため、theReactor->run_reactor_event_loop()を実行するasync_waitを備えたasioのdeadline_timerで十分かもしれません。boost.asio のドキュメントに飛び込むと、別のアイデアが見つかるかもしれません...

コネクタを変更しなくても機能します。文書化されていませんが、Server::instance()->service() (src/http/Server.h 内) は、これを実装するために必要な asio サービスを返します。

詳細 -> Wt のメーリング リスト?

于 2011-05-26T16:28:22.360 に答える