2015-01-20 2 views
2

Я пытаюсь мульти нити своей программы в 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-функций и возвращаемого значения. Спасибо заранее.

ответ

3

Один простой способ заключается в использовании 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(); 
} 
+0

Я сделал то, что вы предлагаете, но это дает мне это 'ошибку: ссылку на нестатическую функцию члена должны быть вызвано автоматически eyesMatch = асинхронной (запуск :: async, _find_eyes, ref (изображение), ref (eye)); 'и то же самое для рта .. Любое предложение? - – JackJack

+0

@JackJack Post полный код в следующий раз. 'std :: async (std :: launch :: async, & MyClass :: _ find_eyes, это, std :: ref (изображение), std :: ref (eye))' и 'std :: async (std :: launch :: async, & MyClass :: _ find_mouth, это, std :: ref (изображение), std :: ref (рот)) '. Замените «MyClass» любым типом имени вашего класса. –

+1

Большое спасибо – JackJack

Смежные вопросы