-1
ブーストスレッドは、引数が静的でなければならないメンバ関数を必要とするようです。それが静的でない場合はバインド方法がありますが、私はオブジェクトoを好む。 o.startThread()よりも オブジェクトo; boost :: thread(boost :: bind ....)スレッドコードをクラス内に保持するため(例外処理も) だから、たとえば、これは仕事に書き換えることができます。他のメンバ関数から非スタティックメンバ関数のブーストスレッドを起動することは可能ですか?
class sayHello
{
string name;
public:
sayHello(string name_):name(name_)
{
}
void repeatHello()
{
while (true)
{
boost::this_thread::sleep(posix_time::seconds(3));
cout<<"Hello "<<name<<endl;
}
}
void infiniteRun()
{
boost::thread thr(repeatHello);//broken line
}
};
P.S.人々は「バインド方法」であるものを放浪するために私の知る限り、それはこれです:
sayHello sh("world");
boost::thread thr(boost::bind(&sayHello::repeatHello,&sh));
どのようにメモリリークが発生する可能性が高く、違反にもアクセスしない可能性があります。デストラクタが最初に行うことはスレッドを停止することですが、何が危害ですか? –
@ジョン:はい、すべてを完全にコーディングすると、何も壊れません。しかし、すべてが完全にコーディングされるわけではありませんそういうわけで、スマートポインターは良い考えです。彼らはメモリが確実に周囲にあることを保証するからです。 –
私はスマートポインタが何であるか知っています。私は彼らがここであなたに勝つものを見ていない。 –