私は宇宙の惑星のシミュレーターを作成していますが、問題は、シミュレーションが指数関数的に遅くなるため、100を超える惑星をシミュレートできないことです。この問題を解決するために、私はおそらくグラフィックカードプロセッサを使用して計算するのに十分な経験がないので、スレッドを使用することで問題を解決できると思いました。
私のプログラムには2つの関数があり、惑星間の重力を計算するために使用され、もう1つは衝突をチェックするために使用されます。ある方法でスレッドを実装したので、あるスレッドで重力を計算し、別のスレッドで衝突を計算します。
問題は、スレッドを使用しない場合よりもシミュレーションが高速に実行されないことです。多分私はそれらを間違って実装していますか?
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;
}