我有一个opencv图像处理函数,被调用了4次,分别对应4个不同的Mat对象。
void processBinary(Mat& binaryMat) {
//image processing
}
我希望您能将其多线程化,以便所有4个方法调用同时完成,但主线程要等待每个线程完成后再继续执行。
例如:
int main() {
Mat m1, m2, m3, m4;
//perform each of these methods simultaneously, but have main thread wait for all processBinary() calls to finish
processBinary(m1);
processBinary(m2);
processBinary(m3);
processsBinary(m4);
}
我希望能够调用processBinary()方法多次,并且保持与仅调用一次相同的效率。我查阅了多线程资料,但对于调用线程、加入线程和分离线程还有些困惑。我认为我需要实例化每个线程并在每个线程上调用join()方法,以便主线程等待每个线程执行完毕,但是执行时间并没有显著增加。可以有人解释一下如何开启多线程程序吗?谢谢!
编辑:我尝试过的内容如下:
//this does not significantly increase execution time. However, calling processBinary() only once does.4
thread p1(&Detector::processBinary, *this, std::ref(m1));
thread p2(&Detector::processBinary, *this, std::ref(m2));
thread p3(&Detector::processBinary, *this, std::ref(m3));
thread p4(&Detector::processBinary, *this, std::ref(m4));
p1.join();
p2.join();
p3.join();
p4.join();
processBinary
的代码。我们不需要了解processBinary
的内部细节来帮助您并行调用它。 - David ThomasprocessBinary
是一个纯函数,你可以只生成4个标准线程并将它们连接起来。 - E net4