Многопоточный вектор потоков c ++ - PullRequest
0 голосов
/ 03 апреля 2020

Я пытаюсь расширить свои знания о потоках в C ++. Я прочитал несколько базовых c руководств по многопоточности, а также мьютексу и пытаюсь создать для l oop, который проходит через вектор и выполняет функцию с каждой его частью. По некоторым причинам некоторые функции не получают ошибок, но большинство делает.

        while (!(threadVecSize + 1) >= maxThreads)
        {
            std::thread thread1;
            thread1 = thread(WindowArray[i]->setPosition(Gravity(KeyArray[i], WindowArray[i]))); //(void) is not a argument exsepted by std::thread::thread
             thread1 = thread(WindowArray[i]->setPosition, Gravity(KeyArray[i], WindowArray[i])); //<error-type>, sf::Vector2i is not a argument exsepted by std::thread::thread
            thread1.join;
        }

установленная позиция изменяет позицию windows и принимает вектор2i Это мой класс для ключей

class NewKey {
public:
    sf::Image Img;
    sf::Texture Tex;
    sf::Sprite Sprite;
    sf::Vector2i Velocity;
    sf::Vector2i Acceleration;
};

Window Array - это вектор sfml Render Windows Все в Функция step windows предназначена для управления моим массивом windows. Я знаю, что весь этот код работает, потому что он работал, прежде чем пытаться добавить потоки, чтобы помочь сгладить его.

Ошибки

No instance of constructor std::thread::thread matches the argument list

Мои переменные

    sf::Vector2i Gravity(MakeKey::NewKey& Key, unique_ptr <sf::RenderWindow>& window);
vector <NewKey> KeyArray;
vector <unique_ptr <sf::RenderWindow>> WindowArray;
vector <thread> threadVec;
int threadVecSize = threadVec.size();
unsigned maxThreads = std::thread::hardware_concurrency();
...