установить поток для запуска аргумента, который принимает переменную, которая принимает больше переменных C ++ Multitreading - PullRequest
0 голосов
/ 05 апреля 2020

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

- это функция, которую я пытаюсь запустить WindowArray[i]->setPosition(Gravity(KeyArray[i], WindowArray[i])).

Если я делаю это таким образом, получаются ошибки

std::thread thread1;
thread1 = thread(WindowArray[i]->setPosition, Gravity(KeyArray[i], WindowArray[i]));

Как мне go сделать это?

что-то, что нужно поместить в компилятор

class NewKey {
public:
    sf::Image Img;
    sf::Texture Tex;
    sf::Sprite Sprite;
    sf::Vector2i Velocity;
    sf::Vector2i Acceleration;
    void StepVelocity() {
        Velocity += Acceleration;
        Acceleration = sf::Vector2i(0, 0);
    }
};
vector <NewKey> KeyArray;
vector <unique_ptr <sf::RenderWindow>> WindowArray;
unsigned maxThreads = std::thread::hardware_concurrency();
int activeThreads;
int dropRate;
sf::Vector2i Gravity(NewKey& Key, unique_ptr <sf::RenderWindow>& window) {
    dropRate = 10;
    Key.Acceleration += sf::Vector2i(0, dropRate);
    Key.StepVelocity;
    sf::Vector2i Result = sf::Vector2i(window->getPosition() + Key.Velocity);
    return Result;
}

void StepWindows()
{
    for (int i{ 0 }; i < WindowArray.size(); i++)
    {
        while (!(activeThreads + 1) >= maxThreads)
        {
            activeThreads++;
            std::thread thread1;
            thread1 = thread(WindowArray[i]->setActive(true));
            thread1 = thread(WindowArray[i]->setPosition, Gravity(KeyArray[i], WindowArray[i]));
            activeThreads--;
        }
    }
}

int main() {
    unique_ptr<sf::RenderWindow> window = make_unique<sf::RenderWindow>();
    WindowArray.emplace_back(window);
    StepWindows();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...