私はboost :: refを使ってスレッドに渡すポインタ(オブジェクト)のベクトルを持っていて、そのスレッドでオブジェクトのいくつかの変数を変更します。メインスレッドに戻ると、スレッドで加えられた変更は適用されず、デフォルト値になります。私はこれをデバッグして、スレッドで変更されますが、メインスレッドでは変更されていません。これは、boost :: refが機能しておらず、パラメータが値渡しされているかのようです。別のスレッドで変更したときに変数が変更されないのはなぜですか?
私が間違っていることを誰かに見せてもらえますか?
std::vector<Chunk *> chunks = divideScreen(width, height, chunkSize);
for (Chunk * chunk : chunks) {
chunk->changed = 1; //initial value is 0, change it to 1 before passing to thread
boost::thread chunkThread = boost::thread(boost::bind(&Renderer::render, this, boost::ref(chunk)));
}
//wait for threads to finish
//back in main thread
std::cout << chunks[0]->changed << endl; //prints 1
void Renderer::render(Chunk * chunk) {
chunk->changed = 2; //should be 2 - prints 2 in thread
}
私は、あなたがポインタへの参照が必要だと思っている理由を理解している[mcve] – user463035818
btwを提供してください。 – user463035818
"スレッドが完了するのを待つ" 。スレッド上で常に 'chunkThread.join()'または 'chunkThread.detach()'を呼び出す必要があります。私の推測が正しくない場合は、完全な例を提供してください。 – Ptaq666