私のプログラムは、 main( )。main() は「world」自体の更新を処理し、関数 updateDisplay() は「world」の内容をモニターに表示します。updateDisplay() は別の C++11 スレッド (main() で開始される) によって実行され、渡された参照を介して「世界」にアクセスします。
私の問題は、以下の updateDisplay() からの (簡略化された) コードの抜粋で、ベクトル world.m_grid[i][j].m_rabbit が " if (!world.m_grid[i][j].m_rabbit.empty())" updateDisplay() をチェックインしますが、その後 m_rabbit[0] ベクトル メンバーにアクセスする前に、「ベクトル添え字が範囲外」になります。エラー。
for (int i = 0; i < rows; ++i)
{
for (int j = 0; j < columns; ++j)
{
if (!world.m_grid[i][j].m_rabbit.empty())
{
s_rabbit_64.setScale(absTileScale * world.m_grid[i][j].m_rabbit[0].m_size, absTileScale * world.m_grid[i][j].m_rabbit[0].m_size);
s_rabbit_64.setPosition(x * k + (12 * absTileScale), y * (i - winFocus.y) + (12 * absTileScale));
window.draw(s_rabbit_64);
}
}
}
私の質問は、world.m_grid[i][j].m_rabbit ベクトルをロックダウンして、updateDisplay() スレッドがアクセスしている間、main() が変更できないようにするにはどうすればよいですか? これは std::mutex を使用することで達成できると思いますが、これを自分のプログラムに適用するのに十分な理解を与えるガイドを見つけることができませんでした。これが理解できるほど明確であることを願っています (プログラムはこの抜粋よりもはるかに大きく、大規模なテキスト ダンプを行いたくありませんでした)。必要な点について説明を求めてください。
ご清聴ありがとうございました。
[編集] つづり