Точки, многопоточность

191
26 июня 2017, 20:02

Суть заданния, нужно найти точку которая ближе к началу (0,0) находится , делать используя многопоточность. Я создаю функции для решения задания:

float distance(const Point2f& point1, const Point2f& point2)
{
   return std::sqrt(point1.mX * point2.mX + point1.mY * point2.mY);
}
bool cmp(const Point2f& point1, const Point2f& point2)
{ 
   Point2f point0(0.0f, 0.0f);
   return distance(point1, point0) < distance(point2, point0); 
}
std::ostream& operator<< (std::ostream& os, const Point2f& point)
{
   os << point.mX << ", " << point.mY;
   return os;
}

Также есть у меня функция в которой я определяю сколько один поток будет обрабатывать значений:

 std::vector<std::pair<std::size_t, std::size_t>> GenerateIntervals(std::size_t numThreads, std::size_t points){}

и у меня в main.cpp проблемы я создаю вектор с точками и размер вектора:

 std::vector<Point2f> points = { (1.5f, 2.6f) ,(3.9f, 4.2f), (8.2f, 9.4f), };
 const std::size_t size = points.size();

создаю поток, вектор с минимальными значениями в каждом потоке, переменую интервал

std::size_t numThreads = std::thread::hardware_concurrency();
std::vector<std::thread> threads;
threads.reserve(numThreads);
std::vector<int> minValues(numThreads);
auto intervals = GenerateIntervals(numThreads, size);

Теперь код где выдает ошибку:

for (std::size_t i = 0; i < intervals.size(); ++i)
    threads.emplace_back(&ProcessRange, array + intervals[i].first, intervals[i].second, &minValues[i]);
for (std::size_t i = 0; i < threads.size(); ++i)
    threads[i].join();
int min = *std::min_element(minValues.begin(), minValues.end());
std::cout << "Min: " << min << "\n";

Ошибка:

Error   C2672   'std::invoke': no matching overloaded function found    MinPoint2f  c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread  240 Severity    Code    Description Project File    Line    Suppression State
 Error  C2893   Failed to specialize function template 'unknown-type std::invoke(_Callable &&,_Types &&...)'    MinPoint2f  c:\program files (x86)\microsoft visual studio 14.0\vc\include\thr\xthread  240 

Как мне правильно записать в поток и вывести на екран точку ?

READ ALSO
Не вызывается деструктор у класса

Не вызывается деструктор у класса

Доброго времени сутокИмеется класс, который изменяет кодировку консоли

199
Вопрос на собеседовании про движок для карт [требует правки]

Вопрос на собеседовании про движок для карт [требует правки]

На собеседовании меня спросили про опыт работы программистом в авиационной сфереЯ сказал, что написал на Qt (С++) программу расчета траектории...

190
Drupal 7, JQuery и flexslider

Drupal 7, JQuery и flexslider

Главная проблема - не работает flexslider - поставил JQuery update, как советуют, но это не помогает

327
Как с помощью diff сравить 2 даты?

Как с помощью diff сравить 2 даты?

Как с помощью метода diff, правильно сравнить 2 даты?

298