こんにちは、Towerdefence にスレッドを追加して高速化しようとしましたが、現在はかなり遅いです。
コードの構造は非常に単純です
メインはsdl opengl initで始まり、すべてを初期化します。次にゲームループ。スレッド順序なし: 1:キーボードとマウスのイベントが最初 2:gameManager 3:drawGlScene
gameManager はすべてを計算します: モンスターの移動、モンスターの攻撃、攻撃アニメーションとサウンドの作成、勝敗のチェック、ウェーブが行われた場合、モンスターのスポーンと機能は、スピード モードがオンの場合に 2 回実行されます。その他の小さな機能。
描画関数は、すべてのデータを使用してすべてを描画します。描画機能内でのデータ変更はありません
私が使用するCPUはクアッドコアで、メインのビジュアル部分の最初のステップのinitスレッドのものです
int main ( int argc, char** argv )
{
pthread_t t_engine;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE);
次に、他のすべての初期化とゲーム ループの開始が sdl イベント スイッチで開始されます (まだゲーム ループ内にあります)。
//calculate everything if we are in playing gamestate
if(id == MODE_PLAY)
{
rc = pthread_create(&t_engine, &attr, gameManager, (void *)t);
if (rc)
{
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
//gameManager((void *)t);
}
//draw everything
DrawGLScene();
if(id == MODE_PLAY)
{
rc = pthread_join(t_engine, &status);
if (rc)
{
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
ゲームマネージャー:
void *gameManager(void *t)
{
//then lot of stuff
//function ending like this
pthread_exit((void*) t);
}
ps: 私は Windows 7 を使用しており、IDE はコードブロックであり、gnu gcc コンパイラを使用しています。