クラスのctorでstd :: threadを初期化する必要があります。スレッドは、クラス自体のメンバ関数を実行する必要があります。スレッドで初期化しようとすると、プログラムはメンバ関数を実行しようとします。 (移動意味が実装されています)。可動クラスのctorでstd :: threadを初期化する
Page::Page(Motion *_parent):
parent(_parent)
{
std::thread x(&Page::play,this);
starter = std::move(x);
}
プログラムはthis
のplay()
を実行します!それはやっての標準的な方法だ場合、私は、今、私はstd::bind
で遊んだ...
void Page::start()
{
std::thread x(&Page::play,this);
x.join();
}
をと正常に動作しますが、それはOKだかどうかわからない:
EDIT:私はこれを行いますコードを置き換えます。
#include <iostream>
#include <thread>
#include <functional>
struct Foo
{
Foo()
: thread(std::bind(Foo::bar, this))
{ }
~Foo()
{ thread.join(); }
static void bar(Foo *foo)
{ }
std::thread thread;
};
int main()
{
Foo foo;
}
私はあなたの質問が得られません。 – kukyakya
@kukyakya:問題はctorの最初の行にあり、プログラムは 'this-> play()'を実行します。 –
@ジョアヒム:私はそれを理解することはできません... –