У меня есть объект класса AI
, который имеет частную нестационарную функцию void, которая имеет много аргументов: minmax(double& val,double alpha, double beta, unsigned short depth, board* thisTurn)
; потому что это очень интенсивная функция, я хочу использовать несколько потоков для ее запуска одновременно, поэтому я должен создать поток с этой функцией внутри другой функции внутри класса AI;создавать потоковые функции класса с аргументами внутри класса
Согласно This question, чтобы потоки внутри функций-членов содержащих нерастворимые статических функций Wiht без аргументов упомянутого класса, один должны вызвать:
std::thread t(&myclass::myfunc,this);
и в соответствии с this tutorial нитей fucntions с несколькими аргументами могут быть создана например:
std::thread t(foo,4,5)
где функция 'Foo' имеет 2 целочисленных аргумента
Однако я хочу смешать их с вещами, вызвать функцию, которая имеет аргументы, которая также является нестационарной функцией-членом, изнутри класса, членом которого она является, и я не уверен, как их смешивать с вещами.
Я с курса пытался (помните, что он находится внутри функции внутри класса AI):
std::thread t(&AI::minmax,val,alpha,beta,depth,thisTurn,this);
и
std::thread t(&AI::minmax,this,val,alpha,beta,depth,thisTurn);
Но в обоих случаях не удается с ошибкой компиляции, как это:
error: no matching constructor for initialization of 'std::thread'
candidate constructor template not viable: requires single argument '__f', but
7 arguments were provided
Мой вопрос в том, что если или нет, это даже возможно - изнутри функции-члена ion класса - вызов нестационарной функции-члена, которая имеет несколько аргументов в качестве потока, и, если это так, как это делается.
Этот вопрос, однако, не имеет значения, или нет, это хорошая идея использовать многопоточность в моем конкретном случае.
Редактировать
После выполнения некоторых испытаний я понял, что я не могу вызывать функции с аргументами, резьб на всех, функции даже не-нечленов только с одним аргументом, которая вызывается непосредственно из основной, это, однако решить, попросив this other question где я понял, что мне просто нужно добавить флаг -std = C++ 11 (потому что макросы с гарантией не всегда используют все возможности C++ 11 в качестве стандарта), после чего ответ работает нормально.
попробовать 'станд :: поток т (& AI :: MINMAX, это, станд :: исх (Val), альфа, бета, глубина, thisTurn, это);' –
@PiotrSkotnicki это приводит к той же ошибке, что и раньше, и эта новая ошибка '' не соответствующая функция для вызова '__invoke'' – Nikolaj
показать код, или он никогда не был –