我的线程程序有问题。我知道问题是什么,我只是不知道怎么解决。我正在设置任意数量的线程,以创建mandelbrot集,然后将其写入ppm文件。我使用std::线程的向量,并调用Mandelbrot类成员函数来执行线程处理。问题就发生在这里。我正在调用一个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);
}
}
发布于 2014-01-24 20:47:11
threads.emplace_back(mandelbrot.mandelbrotsetThreaded());
// ^^
// note this!
这一行代码实际上将调用mandelbrot.mandelbrotsetThreaded()
,并尝试使用返回值传递给threads.emplace_back()
。当返回类型指定为void
:-)时,它会发现这非常困难。)
您想要的是函数(地址)本身,而不是函数的结果,类似于:
threads.emplace_back(mandelbrot.mandelbrotsetThreaded);
https://stackoverflow.com/questions/21346701
复制相似问题