Во-первых, я знаю, что название ужасно сформулировано, и я не думаю, что есть лучший способ его сформулировать. В основном я использую 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();
}