ファイルからの読み取りと 2D ベクトルへの保存に問題があります。これは、ファイルに書き込む関数です。
void create_input (int num_frames, int height, int width)
{
ofstream GridFlow;
GridFlow.open ("GridDB");
for (int i = 0; i < num_frames; i++)
{
for (int j = 0; j < height; j++)
{
for (int k = 0; k < width; k++)
{
GridFlow << setw(5);
GridFlow << rand() % 256 << endl;
}
}
}
GridFlow.close();
}
これは、各行 (高さ * 幅 * num_frames) の回数に乱数を書き込むだけです。このような:
3
74
160
78
15
30
127
64
178
15
107
私がやりたいことは、ファイルから読み返し、ファイルのさまざまなチャンク (幅 * 高さ) をさまざまなフレームに保存することです。私はこれをやろうとしましたが、プログラムはエラーなしでブロックされます:
vector<Frame> movie;
movie.resize(num_frames);
for (int i = 0; i < num_frames; i++)
{
Frame frame;
int offset = i*width*height*6;
vector<vector<int>>tmp_grid(height, vector<int>(width, 0));
ifstream GridFlow;
GridFlow.open ("GridDB");
GridFlow.seekg(offset, GridFlow.beg);
for (int h = 0; h < height; h++)
{
for (int g = 0; g < width; g++)
{
int value;
GridFlow >> value;
tmp_grid[h][g] = value;
}
}
frame.grid = tmp_grid;
movie[i] = frame;
}
読み取りを開始するために、毎回 6 (バイト数 * 行) を掛けるオフセットを使用しました。構造体 Frame は、値を格納するための 2D ベクトルにすぎません。次のステップでこのマルチスレッドを実行するため、オフセットを使用してこれを行う必要があります。フレームの番号を知っている各スレッドは、読み取りと保存を開始するための正しいオフセットを計算する必要があります。