スレッド化プログラムに問題があります。問題が何であるかはわかっていますが、それを修正する方法がわかりません。マンデルブロー セットを作成し、それを ppm ファイルに書き出すために、任意の数のスレッドを設定しています。私は std::thread のベクトルを使用しており、マンデルブロ クラス メンバー関数を呼び出してスレッド化を行っています。ここで問題が発生します。コンパイラが気に入らない void(void) 関数を呼び出しています。スレッドが void(void) 関数を実行するようにこれを修正するにはどうすればよいですか? 私のコードは以下の通りです:
main.cpp
int main(int argc, char **argv) {
const unsigned int WIDTH = 1366;
const unsigned int HEIGHT = 768;
int numThreads = 2;
Mandelbrot mandelbrot(WIDTH, HEIGHT);
if(argc > 1) {
numThreads = atoi(argv[1]);
}
std::vector<std::thread> threads;
for(int i = 0; i < numThreads; ++i) {
threads.emplace_back(mandelbrot.mandelbrotsetThreaded());
}
for(int i = 0; i < numThreads; ++i) {
threads[i].join();
}
return 0;
}
mandelbrot.cpp
void Mandelbrot::mandelbrotsetThreaded() {
while(true) {
int row = 0;
{
std::lock_guard<std::mutex> lock(row_mutex);
row = cur_row++;
}
if(row == width) return;
createMandelbrotSet(row);
}
}