問題タブ [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::signalメモリアクセスエラー
boost :: signalを使用してコールバックメカニズムを実装しようとしていますが、ライブラリの最も些細な使用法でも、boost::signalコードでメモリアクセスアサーションを取得しています。私はそれをこのコードに単純化しました:
ありがとう!
編集:これは、Visual Studio 2008 w/SP1でコンパイルされたBoost1.36.0でした。Boost :: filenameと同様に、Boost :: filesystemにも、リンクする必要のあるライブラリがあり、正常に機能しているようです。私が使用している他のすべてのBoostライブラリは、ヘッダーのみであると私は信じています。
delegates - C++/CLI で boost::bind を使用してマネージド クラスのメンバーをバインドする方法
私はネイティブ C++ クラスで boost::signal を使用しています。現在、ネイティブ C++ コールバックを .NET イベントとして公開できるように、C++/CLI で .NET ラッパーを作成しています。マネージ クラスのメンバー関数のアドレスを取得するために boost::bind を使用しようとすると、コンパイラ エラー 3374 が発生し、デリゲート インスタンスを作成しない限り、メンバー関数のアドレスを取得できないというメッセージが表示されます。boost::bind を使用してマネージド クラスのメンバー関数をバインドする方法を知っている人はいますか?
明確にするために、次のサンプル コードではコンパイラ エラー 3374 が発生します。
c++ - パブリック ブースト::シグナル オブジェクト
私boost::signal
は怠け者なので公開します。
... でカプセル化するのではなく、Button::OnClicked(boost::function<void()>)
.
これは戻ってきて私を噛むつもりですか?
c++ - コピー可能なブースト::シグナルを作成するには?
コピーできない理由はわかりますが (シグナルのコピーには明確な意味がないためです)、ある種のコピー ctor (ノーオペレーションまたはすべての接続をコピーするもののいずれか) をboost::signal
提供するバージョンが必要です。
私がこれを必要とする理由は、私のプロジェクトでは多くのオブジェクトが特徴的なシグナルのおかげでコピー不可になり、それらを快適な値のセマンティクス (shared_ptrs はそれほど快適ではありません) で扱うために、DRY に違反して手動で copy-ctors を提供する必要があるためです。明らかに、ある種の準コピー可能シグナルは、ここでの C++ の醜さに対する良い回避策です。
頭に浮かぶ最初の解決策はsignal
、派生クラスでコピー ctor を継承して提供することですが、signal には仮想 dtor がないため、それはできません。
考え?
c++ - Boost Signals2 と Threads を使用して、C++ でソフトウェア ウォッチドッグ タイマー スレッドを作成できますか?
現在、シングルスレッドアプリケーションで他の誰かのライブラリから関数 Foo を実行しています。ほとんどの場合、私は Foo を呼び出しますが、それは非常に迅速です。時には、Foo を呼び出すと、永遠に時間がかかります。私は忍耐強い人ではありません.Fooが永遠にかかる場合は、Fooの実行を停止し、それらの引数で呼び出したくありません.
特定の秒数後に実行を停止できるように、制御された方法 (現在の環境は POSIX/C++) で Foo を呼び出す最良の方法は何ですか。ここで行うべき正しいことは、Foo を呼び出す 2 番目のスレッドを作成することだと思いますが、メイン スレッドでは、時間切れになった場合に最終的に 2 番目のスレッドに通知するタイマー関数を作成します。
別のより適切なモデル (およびソリューション) はありますか? そうでない場合、Boost の Signals2 ライブラリと Threads でうまくいくでしょうか?
c++ - ブーストシグナルダブルフリー?
私はある種のメモリ アクセス エラーをデバッグしようとして、かなりの時間を費やしています。これは、ダブル フリーだと思います。コードは複雑すぎて投稿できませんが、説明を試みることができます。
基本的に、私は2つのスレッドを持っています。ワーカー スレッドが作成されると、new boost::signal
オブジェクトがインスタンス化され、shared_ptr
. 次に、親はスレッドにシグナルを照会し、親connect()
はshared_ptr
シグナルをハンドラー関数に送信します。
これは、スレッドが終了してクリーンアップを試みるまで、すべて機能します。誰かが私が見逃した何かを見てくれることを期待して、コール スタックの一部を次に示します。
アドバイスをいただければ幸いです。私はこれを数日間調べてきましたが、問題を理解できません。
c++ - ブースト信号呼び出しを除く
シグナルと、スロットのあるいくつかのオブジェクトがあります。1 つのオブジェクトがシグナルを呼び出し、それ自体の接続をブロックするときの動作を実装したいと考えています。小さなスニペットがより有益になると思います:
質問:
- いくつかのブーストのものを使用した標準的なアプローチはありますか? 車輪の再発明ですか?
- TSignal署名でCallメソッドを定義するには?
c++ - 複数のboost::connectを使用した単一のslot_typeでのメモリリーク
boost::signals
複数の信号を単一の信号に接続しようとすると、メモリを使用してリークしていslot_type
ます。これと同じリークがさまざまなフォーラムで報告されているのを見てきましたが、これを行う正しい方法や回避策について言及しているものは見つかりません。
私がやろうとしていること:
結果を関数に渡そうとしboost::bind()
ています。この関数では、その結果に複数の信号を接続したいと思います。最初の接続は正常に機能しますが、最初の接続以降のすべての接続でハンドルがリークします。
サンプルコードは次のとおりです。
今すぐ呼び出しますCallingClass::connectSignals()
。
connectToSlots
の呼び出しにより、50個の信号が単一のスロットに接続され、それらの信号がすべて切断されてクリーンアップされることを期待しています。実際に発生するのは、1つの信号が完全にクリーンアップされ、残りの49の信号が部分的にクリーンアップされますが、一部のメモリがリークすることです。
スロットを関数に渡して複数回使用する正しい方法は何ですか?どんな助けでもいただければ幸いです。
ありがとう、クリス