スレッドとバインドのやりとりに関して少し問題があります。C++バインドを使用してスレッドを作成する際の問題
それは簡単です、私はうまく今ではすべてが大丈夫ですまで
class myclass {
// ...
// ...
void dosome();
void doanother(myclass2, myclass3*);
void run() {
this->_myt = boost::shared_ptr<boost::thread>(
new boost::thread(boost::bind(&myclass::dosome, this)));
}
// ...
boost::shared_ptr<boost::thread> _myt;
//...
};
OK、このような状況を持っています。バインドは、ある関数または関数へのポインタを、いくつかの値以上、いくつかの引数値にバインドできることを理解しています。 myclassオブジェクトを呼び出すと、関数run()によって新しいスレッドが開始されます。私は質問があります。なぜ、関数dosomeがパラメータを使用していないときに、実行時にバインドがパラメータをとるのですか?なぜなら、クラス関数のためには、クラスへのポインタである暗黙の引数が常に存在するからです
これは私の唯一の問題ではありません。 は、私がこれを行うの私の最初のスレッドの実行フローであるdosome、内側:
void myclass::dosome() {
myclass2 m;
myclass3* x = new myclass3;
boost::shared_ptr<boost::thread>(new boost::thread(
boost::bind(&myclass::doanother, m, x, this))); // Line X
}
まあ、私は別のスレッドをexecしたいです。 最初の質問:shared_prtはスマートなポインタです。つまり、dosome()がexecフローから抜け出すと、そのスコープから実行されたスレッドは、shared_ptrになります。 2番目の質問:コンパイラは、行Xの命令のために本当に怒っています... 問題はバインドです、それはおそらく私がそこを通過したものが好きではありません...なぜですか?これはメンバー関数です(私はdoanotherについて話します)、これに2つの引数があります。 どこに問題がありますか?
は、ブーストのためにあなたに
コードを選択してCtrl + Kキーを押してコードをフォーマットしてください。プレビューを使用します。 – EboMike