具有非空函数的多线程

Posted

技术标签:

【中文标题】具有非空函数的多线程【英文标题】:Multi threading with non-void functions 【发布时间】:2015-01-20 13:56:05 【问题描述】:

我正在尝试在 C++ 中对我的程序进行多线程处理(我使用 OpenCV 库) 这是代码:

double _find_eyes (Mat img, vector<Rect_<int> > & finalEyes)

//some code working on image
return valueOfMatch; //is a double


double _find_mouth (Mat img, vector<Rect_<int> > & finalMouth)

//some code working on image
return valueOfMatch; //is a double


double _find_face ()

eyesMatch = _find_eyes(image, eye);
mouthMatch = _find_mouth(image, mouth);
totalMatch = eyesMatch + mouthMatch;


int main()

find_face();

我想使用线程以并行方式找到嘴巴和眼睛。怎么做?我的问题在于非 void 函数和返回值。 提前致谢。

【问题讨论】:

【参考方案1】:

一种简单的方法是使用std::async,例如:

double _find_face ()

    auto eyesMatch = std::async(std::launch::async, _find_eyes, std::ref(image), std::ref(eye));
    auto mouthMatch = std::async(std::launch::async, _find_mouth, std::ref(image), std::ref(mouth));
    return eyesMatch.get() + mouthMatch.get();

【讨论】:

我按照你的建议做了,但它给了我这个error: reference to non-static member function must be called auto eyesMatch = async(launch::async, _find_eyes, ref(image), ref(eye)); 和嘴巴一样。有什么建议吗? —— @JackJack 下次发布完整代码。 std::async(std::launch::async, &amp;MyClass::_find_eyes, this, std::ref(image), std::ref(eye))std::async(std::launch::async, &amp;MyClass::_find_mouth, this, std::ref(image), std::ref(mouth))。将 MyClass 替换为您的班级名称。

以上是关于具有非空函数的多线程的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的多线程并行求和函数的向量受限于线程数?

在具有动态大小的内存池的多线程 C/C++ 中实现内存管理器?

Junit测试具有数据库访问权限的多线程应用程序[重复]

第73课 Qt中的多线程编程

Windows 中的多线程 - 创建函数指针数组时出错

MATLAB 中的多线程