問題タブ [ace]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
boost - shared_ptr パズル
私は ACE フレームワークを使用していますが、それを参照せずに問題を説明しようと思います。
イベント ハンドラー (ACE_Event_Handler から派生したクラス) があります。イベント ハンドラーへの参照は、shared_ptr のマップ内の一部のマネージャー クラスによって保持されます。
ある時点で私はしたい:
- マネージャー マップからイベント ハンドラーを削除する
- イベント ハンドラのいくつかのメソッドは、イベント ハンドラへの行ポインタを保持する 3 番目のクラスによって呼び出される必要があります (ACE に精通している場合は、ACE Reactor によって呼び出される handle_close() です)。
問題は、順序 (1) と (2) が約束されていないことです。(1) が (2) の前に呼び出された場合、(2) はダングリング イベント ハンドラーで動作します。
そのため、(2) でデクリメントされるイベント ハンドラーへの参照を追加することを考えました。
それはどのように行うことができますか?イベント ハンドラへの参照をイベント ハンドラ自体から維持できますか (おそらく enable_shared_from_this を使用)。
ありがとう
c++ - リモート UDP マルチキャスト サービスに接続する
サービスが存在する IP アドレス (たとえば70.70.70.70
)、接続するマルチキャスト グループ (たとえば224.25.25.25
)、およびポート (たとえば2020
) がある場合、リモート udp マルチキャストに接続するにはどうすればよいですか?
私は ACE フレームワークを使用しており、スニファーで224.0.0.2
、グループに参加するために ACE が IGMP パケットを に送信していることがわかりますが、ホーム ルーター (チェックポイント) はそれをどう処理すればよいかわかりません。
c++ - ACE_DLL::いくつかの dll ファイルのオープンに失敗しました
私はこのエラーに非常に困惑しています。完全なエラー情報は次のとおりです。
TestFE.dll の ACE_DLL::open に失敗しました: エラー: 詳細についてはログを確認してください。サービスが見つかりません: MySvc
しかし、別の TestBE.dll を取得すると、正常に開始できます。
ところで: TestFE.dll の依存 dll ファイルが欠落していません。TestFE.dll を見つけるには、Windows の PATH が正しいです。TestBE.dll と TestFE.dll の間でプロジェクトのビルド オプションを比較しようとしましたが、何も見つかりませんでした。
ここで誰かが理由を理解するのを手伝ってくれますか? ありがとうございました。
linux - ACE と非同期 UDP 通信
私は現在、ロボット工学のシミュレーション環境に取り組んでいます。仮想世界と対話できるロボットは、ネットワーク接続を介して制御/監視できます。ネットワーク通信全体 (そしてもちろんスレッドなどの他のもの) には、ACE ライブラリを使用します。私が今抱えている問題は、非同期 UDP 部分が壊れているように見えることです。ACE に付属のテスト プログラム「test_udp_proactor -h localhost -p 55555」を実行すると、常にエラー コード 89 (宛先アドレスが必要) が返されます。これまでのところ、これは私が試したものですが、何も役に立ちませんでした:
- 新しい/異なるバージョンの ACE の再コンパイル
- test_udp_proactor のコードを修正して、同様のプログラムを再作成する
- 環境の変更 (32bit CPU と Ubuntu 9.10 を搭載した別の PC)
同期方式を使用すると、すべてが正常に機能するため、ネットワーク ハードウェア/ソフトウェアにエラーはありません。
私はグーグルとこのサイトを何時間も何日も検索しましたが、誰もこの問題を抱えていないようです! 少なくとも私はそれを見つけることができません。
私が理解している限りでは、ACE は本当に成熟していて信頼できるので、今は本当にイライラしています。一部の人々はそれのデザインがとても好きですが。信頼性とリアルタイム性が求められる航空宇宙業界で使用されています。ACE が非同期をサポートしていないなんて信じられません。UDP通信および/または他の誰もそれを見つけられませんでした。
誰かが test_udp_proactor で簡単なテストを実行して、この動作を確認できますか? リアルタイム対応のシステムを使用する必要があるため、Windows はオプションではありません...
できれば ACE の専門家からのヒントやヒントはありますか? :-)
どうもありがとうございました
c++ - select関数は内部的にtcpconnectを呼び出しますか?
コードシンペット:
私の質問は、非ブロックエラーのために接続が失敗し、selectが呼び出され、select return successと言うと、もう一度connectを呼び出すか、関数internal do connectを選択する必要がありますか?
c++ - ACE_SOCK_Dgram::open() と errno
既に開いている UDP ポートを開こうとすると、ACE_SOCK_Dgram::open() が失敗しました。予想通り、strace は bind() が失敗し、errno が EADDRINUSE に設定されていることを示しています。
どのようなエラーが発生したかを確認するために ACE_OS::last_error() を使用しましたが、更新されていません。
一般的なエラーではなく、ポートが既に使用されているという有益なエラーをユーザーに提供したいと思います。
おまけの質問 - ACE_OS::last_error() はいつ使用できますか?
TNX
c++ - ACE Reactorは、中断されたシステムコールで終了します
ソケット接続を受け入れ、それらの接続で着信データをリッスンするACEリアクターがあります。反応器は専用のスレッドで動作します。これはスレッドのエントリ関数です。
たまにrun_reactor_event_loop
-1で終了しerrno
、理由が「システムコールの中断」であると報告します。どうすれば状況に対処できますか?私が知っていることから、2つのオプションがあります。もう一度呼び出すか、とを使用しrun_reactor_event_loop
て中断された呼び出しを再度呼び出すように構成します。sigaction
SA_RESTART
run_reactor_event_loop
もう一度電話しても大丈夫ですか?- ACE_Reactor :: restartメソッドは何をしますか?ループを再開することになっているように見えますか?それは役に立ちますか?
- 電源を入れるのはどれくらい安全
SA_RESTART
ですか?たとえば、^ Cがアプリケーションを停止しないということですか? - 状況を処理する他の方法はありますか?
c++ - ACE 6.0 (ネットワーク ライブラリ) をスタティックにビルドするには?
ACE は Visual Studio 用のソリューション ファイルを提供しており、静的および動的好みのソリューション ファイルがありました (ACE.sln および ACE_static.sln)。
彼らが 6.0 をリリースした後、static.sln はなくなりました。
理解できません。静的ソリューション ファイルを削除したのはなぜですか? 理由はありますか?
私は自分で静的ビルドの定義済みの値を入れています。とても迷惑です。
他に便利な方法はありますか?
c++ - ネットワークライブラリを使用した状態情報を含むTCPサーバー
私はオンラインターンベースのゲーム用のtcpサーバーを書いています。すでにphpソケットを使用してプロトタイプを作成しましたが、C++に移行したいと思います。私は人気のあるネットワークライブラリ(ASIO、ACE、POCO、LibEvent)を見てきましたが、現在、どれが私のニーズに最も適しているかは不明です。
1)接続は永続的(数分程度)であり、サーバーは100以上の同時接続を処理できる必要があります。
2)接続は、状態情報(ユーザーログイン情報)を維持できる必要があります。[私のphpプロトタイプは現在、各クライアントリクエストにログイン情報を含める必要があります]
3)オプションで、できればマルチスレッドですが、単一のプロセスです。接続ごとに1つのスレッドを使用するのではなく、開いているすべての接続で動作するスレッドの数を固定することをお勧めします。
私はPOCOのTCPServerまたはReactorフレームワークに傾倒していますが、それらが私の要件を満たしているかどうかは正確にはわかりません。Reactorはシングルスレッドであり、TCPServerは1:1のスレッド/接続を強制していると思います。私は正しいですか?
どちらの場合でも、ログイン情報を特定の接続に関連付けて、接続がランダムに出入りするという最も重要なタスクを実行する方法が正確にはわかりません。
token - ACE_Remote_Mutex はどのように機能しますか?
「トークン」という名前の同じリモート ミューテックスを取得しようとする 2 つの小さなプログラムを作成しました。
どちらも次のデバッグ出力を取得しました。
ACE_Remote_Mutex は、Corba ブローカーのようなある種の「エージェント」でのみ機能しますか? コードを変更できますか?