問題タブ [boost-python]
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++ - 関数呼び出しをほどく
これは説明が難しい問題ですので、不明な点がありましたらお知らせください。
C ++アプリで発生する可能性のあるデッドロックの状況を解決しようとしていますが、適切な解決策を視覚化するのに問題があります。接続しようとしている2つのライブラリによって課せられた制限により、問題は非常に複雑で面倒になりますが、すべて簡単な図にまとめることができます。簡単に言えば、私はそのような状況にあります
アクション2はたまたまタイマーの起動です。私が使用しているライブラリには、設定された時間が経過すると関数を呼び出すこのタイマーコードがあります。
タイマーハンドラーを破棄しているときにタイマーが起動すると問題が発生します(アクション1)。タイマーハンドラーはタイマーが関数を終了するのを待ちますが、Python関数の呼び出しを待っているため、タイマー関数は終了できません。Pythonに入るには、タイマーハンドラーの破棄アクションによって保持されているGILを取得する必要があります。
スレッド1の私が、GILでの待機を中断し、スタックを巻き戻して、このデッドロックの危険から解放することが可能かどうか疑問に思っています。特定のOSの実装にまで踏み込むことを恐れていますが、これ以上の解決策は考えられません。
つまり、スレッド1からのアクション2の呼び出しをキャンセルしたいのですが、これはどのような方法で可能ですか?
スレッド2の操作を編集できないこと、つまり、そのスレッドを管理しているライブラリを編集できないことを述べておく必要があります。PythonのGILロックを変更して、tryロックや時限ロック、あるいは条件を待つこともできますが、それを実行するのは非常に困難です。
最善の解決策は、Pythonを変更してgilを待機することと、GILでの待機をキャンセルしたいときにスレッド1が通知できる名前付き条件を変更することだと思います。しかし、そのルートを進む前に、何か足りないものがあるかどうかを知りたいと思います。
c++ - Boost::Python を使用して純粋仮想メソッドを引数でラップする
現在、Boost::Python を使用して C++ インターフェイス (純粋な仮想クラス) を Python に公開しようとしています。C++ インターフェイスは次のとおりです。
エージェント.hpp
そして、「公式」チュートリアルを読んで、次の Python ラッパーを作成してビルドすることができました。
エージェント.cpp
ビルド中に問題がないことに注意してください。しかし、私が懸念しているのは、ご覧のとおり、AgentWrapper::start が Agent::start に引数を渡していないように見えることです。
Pythonラッパーは、「開始」が1つの引数を受け取ることをどのように認識しますか? どうすればそうできますか?
c++ - Boost :: Pythonを使用して、基本クラスを変更せずにエクスポートされたクラスにメソッドを追加するにはどうすればよいですか?
変更できないC++のクラスがあります。ただし、そのクラスには、Python拡張機能でアクセスできるようにする必要があるアイテムのstd ::list<>が含まれています。Boost ::Pythonにはstd::listとPythonリストの間に組み込みの変換がないように見えるので、この変換を実行できるメソッドをC++で記述できることを望んでいました。 C ++クラスをPythonクラスにマッピングしているので、このメソッドをアタッチできます。
次のようなメソッドを呼び出すことができればいいのですが
python - C++ iostream と python
C++ iostream および python と相互運用することは可能ですか? 私は boost-python を使用しており、引数として istream と ostream を持つ関数をラップしたいと考えています。
c++ - Boost::Python での参照渡し
次のようなものを検討してください。
さて、早送りしましょう。すでにこれらのクラスをラップして、すべてを Python に公開していると想像してください。また、C++ コードで Parameter のオブジェクトをインスタンス化し、それを Python スクリプトに渡し、その Python スクリプトが MyClass オブジェクトを使用してC++ コードの最初に作成した Parameter のインスタンスを変更します。
そのコードが実行された後、C++ の Parameter インスタンスは変更されません!!! これは、参照ではなく、値 (または同様のもの:S) で渡されたことを意味します。しかし、私はそれを参照渡しと宣言したと思っていました...
参照渡しに関する Boost::Python のドキュメントが見つからないようです (ただし、参照渡しに関する十分なドキュメントがあるようです...)。誰かヒントやポインタを教えてください。
c++ - boost.python を使用して opencv 呼び出しでメソッドをインポートするが、コンパイル後にシンボルが見つからないために失敗する
だから私は家にいないので、今はコードを持っていません...しかし、PythonがloadImageIntoMainWindow(string filepath)のようなものと呼ばれる関数にアクセスできるようにするために、C++でPythonのboostライブラリを使用しました
C++ ソース コードでは、メソッドは、ファイルの先頭にインポートされた opencv メソッドを呼び出します。Jamroot ファイルに opencv を含め、コマンド ラインで手動でコンパイルおよびリンクする方法も見つけました...どちらの場合も、私のpythonファイルを実行すると、opencvメソッドへの最初の関数呼び出しでシンボルが見つからないと不平を言います...
C++、コマンド ライン コンパイル ライン、Jamroot、および python ファイルを家に持ち帰り次第、更新します。
ここにジャムルートがあります:
走った後bjam --preserve-test-targets
また
私はこれを得る:
そして、cpp ファイルでは、これよりも少し多くのことを行っています。
c++ - Boost.Python でポインターを公開する
私はこの非常に単純な C++ クラスを持っています:
Python から head 変数にアクセスしたいのですが、表示されるメッセージは次のとおりです。
私が理解していることから、これは、ポインターの概念がないために Python がおかしくなっているために発生します。Python から head 変数にアクセスするにはどうすればよいですか?
カプセル化を使用する必要があることは理解していますが、現在、カプセル化以外のソリューションが必要です。
c++ - boost::pythonでboost::scoped_ptrを公開する
scoped_ptr
のコピーコンストラクターが次のコードスニペットでプライベートであるというコンパイルエラーが発生します。
ただし、この例はshared_ptrで機能します。誰かが答えを知っていれば、それは素晴らしいことです。ありがとう
c++ - Python スクリプトを C++ プロジェクトに追加する
Python で記述されたスクリプトを C++ プロジェクトに追加するにはどうすればよいですか? ありがとう
編集:基本的に、スクリプトが行うことはすべて、データを電子メールで送信することだけです。Pythonで書かれた関数にデータとメールアドレスを渡したいと思います。問題が解決することを願っています..