問題タブ [boost-signals]
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.
c++ - boost:function定義を含むboost:signalsのマップ
エラーコードを関数にマップする単純なマネージャーを作成しようとしています。しかし、マップは値をコピーし、信号はコピーできないため、解決策ではありません。*演算子がboost::functionでブロックされているため、shared_ptrポインターのマップを使用できません。
これを保存するには、どのコレクションを使用する必要がありますか?
boost - Windows XP での Firebreath プラグイン登録の問題
Windows XP で Visual Studio 2010 を使用して firebreath を使用してブラウザー プラグインを開発しています。プラグインはブースト信号、ファイルシステムとシステム、libcurl ライブラリを使用します。
プラグインは正常にビルドされますが、regsvr32 を使用して登録中にエラーが発生します。
しばらく確認したところ、ブースト信号モジュールを削除すると、プラグインが登録されることがわかりました。依存関係ウォーカーでプラグイン dll を確認しましたが、欠落している dll はありませんでした。ADVAPI32.DLL と MPR.DLL でモジュールの警告が表示されましたが。プロジェクトからシグナルモジュールを削除できないため、この問題の解決を手伝ってくれる人はいますか?
signals-slots - Boost.Signals2 で Hypodermic を使用する
Boost.Signals2 を Hypodermic で使用するには、どのようにスロットを接続すればよいですか? OnActivating ブロック内に接続コードを配置しますか?
Hypodermic は Signals2 で構築されていますが、お互いの機能が重複していないと考えるのは正しいですか?
c++ - ブースト信号 - パラメータとして渡されるタイプ
ブースト信号を使用するこの C++ コードを見つけたので、それを理解しようとしています。
どのSelArity
ファンクターが返されるのかわかりません。私が理解している限り、署名付きのm_signal
関数に接続できるシグナルを宣言できるタイプです。Signature
どのようにして型をパラメーターとして持つことができますか?( を参照return BaseType::m_signal( arg );
) によって表される型は何ResultType
ですか? SelArity
そして、ファンクターによって返されたオブジェクトをどのように使用できますか?
c++ - ブーストライブラリを正しくリンクするc ++ Netbeans 7.2.1
私は最近、Visual Studio 2010 Express から NetBeans を使用するように切り替えました。適切にコンパイルするには多少の調整が必要でしたが、レイアウトとシンプルさにすでに非常に感銘を受けています。ただし、別の問題があります。ブーストも機能するかどうかをテストしたとき、ファイルboost/signals.hppをmain.cppに含め、プロジェクトオプションの追加のライブラリディレクトリに移動し、ブーストインストールのlibディレクトリを追加しました。私はビジュアルスタジオでやります。このすべての後、とにかく未定義の参照がたくさんあります。
私は msys で mingw コンパイラを使用していますが、違いがある場合はバージョン 1.47 をブーストしています。Visual Studio を使用している場合、このブーストの同じインストールが正常に機能することを確認できます。
ビルドログはこちら。
編集:
プロジェクト プロパティの [ライブラリの追加] ダイアログから必要な lib ファイルを手動で追加しようとすると、このエラーが発生します。
c++ - boost :: signalスロットは同期または非同期で呼び出されますか?
boost::signals
スロットが同期的または非同期的に呼び出されていることを誰かに教えてもらえますか?
たとえば、次のコードがあります。
実行スレッドはどのように機能しますか?実行は実行を待機しHello()
てWorld()
実行し、その直後に出力されます"Foo"
か、それとも非同期で呼び出しますか(「Foo」を出力し、未定義の順序で呼び出しHello()
て実行します)?World()
c++ - Boost::signals2 - スロットを持つオブジェクトの説明
このことを考慮:
出力は「Slot called!」です。クラッシュも何もありません。そのため、いくつか質問があります。
1) クラッシュしないのはなぜですか?
2) スロット関数が存在しないオブジェクトに何かを割り当ててもクラッシュしないのはなぜですか?
3) 信号がスロットの有効期間を自動的に追跡するようにするにはどうすればよいですか? つまり、スロットが破壊されると、切断されます。
質問番号 3 が最も重要です。オブザーバー パターンを実装する必要があり、オブザーバー (スロット) の有効期間が (アプリの実行中ずっと) 静的ではないことが非常に多いためです。
c++ - sigabrt を引き起こすデストラクタ中のブースト信号
boost::signals2 を使用してオブジェクト破壊の追跡を開始しました。ここで、デストラクタでまだシグナルを使用できるかどうかを確認するためだけに、小さなテストを作成しました。うまくいったようです。その後、他のオブジェクトを参照するオブジェクトのリストを追跡するために使用し始めました。私の構造は多かれ少なかれそうです:
構造の簡略図: http://oi50.tinypic.com/16c8cwn.jpg
IModel と IBlock の 2 つのクラスがあります。IModel には多くの IBlock があり、IBlock には IModel の親があります。ただし、IModelBlock と呼ばれる特別な IBlock があります。このブロックには、親に加えて参照される IModel があります。これは、IModel 間の「コネクタ」のようなものです。どの IModel がそれらを使用しているかを IModel に知らせたかったので、どのモデルが別のモデルを使用しているかを追跡するために、IModel と IBlock の破棄中に発生するシグナルを使用する参照カウント システムを実装しました。
IBlock の純粋な仮想クラスがあります (明らかにデストラクタを除く):
私の IModelBlock ヘッダー (純粋な仮想クラス):
私の IModel ヘッダー (純粋な仮想クラス):
使用されていることをモデルに通知する IModelBlock コンストラクター (ModelBlock クラス) の私の実装:
ここが毛むくじゃらです
私の IModel (モデル) の実装では、次のように定義されています。
これが何が起こるかです
ModelBlocks を使用して内部にネストされたモデルを含む一連のモデルを作成すると、すべてがうまく機能します。ただし、破壊に関するいくつかの問題が予想されたので、巨大なセグメンテーション違反に備えました...決して起こりませんでした。代わりに、すべてのモデル (およびそのすべてのブロック) に破壊フェーズを開始させたときModel::onModelBlockDestroying
、最初のif
. コンソールを見ると、pure virtual method called
. このエラーは今まで見たことがないので、修正方法がわかりません。
スタック トレースは、~IBlock デストラクタを呼び出していてsigBlockDestroying
、10 関数レベルの後に最終的に関数を呼び出したシグナルを発行したことを示していonModelBlockDestroying
ます。ここで、Model が破棄されていれば、そのシグナルはすべて切断されているはずであり ( を参照~Model
)、sigBlockDestroying は何も呼び出さなかったはずです。したがって、~IBlock デストラクタが呼び出されたときにモデルがまだ存在していて、オブジェクトがまだ有効であると結論付けることができます。明らかに問題があるため、この仮定が間違っていることは 99.9% 確信していますが、なぜそれが起こっているのか、どのように修正するのかはわかりません。上記のコードがたくさんあることは知っていますが、どこが間違っているのか誰かわかりますか?
編集: に渡された IBlock* のメンバー関数を呼び出すことに関係しているように感じますonModelBlockDestroying
が、オブジェクトはまだ消えていません (ただし、実際の実装のデストラクタを既に通過しているため、残っているだけです)呼び出しに純粋な仮想を使用)。それが起こっていることですか?デストラクタが ~IBlock にあるため、ツリーのはるか下に到達するまでに、~ModelBlock のデストラクタが既に呼び出されているため、実装されているすべての関数にアクセスできなくなりますか?
十分に説明できなかった場合は、お知らせください。明確にします。
c++ - これはブースト信号を使用するための正しく適切な方法ですか?
MVC アプリケーションを作成していますが、モデルが出力テキストを GUI に送信して表示できるようにする方法が必要です。
関数ポインターを推奨する人もいますが、メンバー関数の関数ポインターを渡す場合は、オブジェクトへのポインターも渡す必要があることを学びました (メソッドを呼び出すことができるように、オブジェクトポインターだけを渡さないのはなぜですか? )
とにかく、boost::signals2 の使用も推奨されています。非常に単純な実例を実装しました。基本的に、信号を GUI オブジェクトの関数にバインドします。次に、シグナルへのポインターを、シグナルをトリガーできるオブジェクトに渡します。以下のコードを参照してください...
私は信号の完全な初心者であるため、それらを使用することを意図しているため、それらを使用しているかどうかは完全にはわかりません.
c++ - シグナル コールバックを渡す方法 (boost::bind を使用)
boost::signals2::signal
よりクリーンで使いやすいインターフェイスを実現するためのラッパーを作成しています。これが私が思いついたものです:
これが私が思いつく最高のラッパー インターフェースかどうかはわかりません。SomethingHappened をパブリック メンバーにすることには、おそらくいくつかの欠点があるかもしれません。それについてあなたの意見を聞いてもかまいませんが、それはこれが質問の内容ではありません.
私が疑問に思っているのは、コールバックを+=
オペレーターに渡す方法です。ClassThatListensForEvents
関数へのコールバックで書いたように問題はありませんが、結果bind
を使用すると、読みにくいテンプレート コンパイラ エラーが大量に発生します。