您好,我尝试在我的塔防中添加线程以使其更快,但现在速度慢了很多。
代码的结构很简单
主要从 sdl opengl init 和 init 开始。然后游戏循环。无线程顺序:1:键盘和鼠标事件优先 2:gameManager 3:drawGlScene
gameManager 计算一切:移动怪物,攻击怪物,创建攻击动画和声音,检查你是赢还是松,如果波完成,怪物产卵和功能运行 2 次如果速度模式打开。和其他一些小功能。
绘图功能使用所有数据来绘制一切。使用绘图功能修改数据为 0
我使用的 cpu 是四核的,这里是 main 中的视觉部分第一步 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 编译器 pps:我也尝试过互斥锁、sem 和其他东西,但没有真正的不同,谢谢你花时间帮助我(=