我正在制作一个太空行星模拟器,问题是,我无法模拟超过 100 颗行星,因为模拟速度呈指数级下降。为了解决这个问题,我认为使用线程可以解决我的问题,因为我可能没有足够的经验使用显卡处理器进行计算。
我的程序中有两个函数用于计算行星之间的引力,另一个用于检查碰撞。我以某种方式实现了线程,所以我计算一个线程中的重力和另一个线程中的碰撞。
问题是模拟在不使用线程的情况下并没有运行得更快。也许我执行错误?
int main()
{
int numOfPlanets;
cout << "Enter the maximum number of planets to generate: ";
cin >> numOfPlanets;
App.Create(sf::VideoMode(1366, 740), "SFML Galaxy Simulator");
App.Clear(sf::Color(20,20,20));
generateRandomPlanets(500, 500, numOfPlanets);
//createPlanet(planets, sf::Vector2f(500,500), sf::Vector2f(0,0), 5, 500);
thread thread_1;
thread thread_2;
while(App.IsOpened())
{
sf::Event Event;
while (App.GetEvent(Event))
{
if (Event.Type == sf::Event::Closed)
App.Close();
}
App.Clear(sf::Color(20,20,20));
thread_1 = thread(checkCollision);
thread_2 = thread(calculateForce);
thread_1.join();
thread_2.join();
updatePlanets();
App.Display();
}
thread_2.join();
thread_1.join();
return 0;
}