所以我有点搞不懂我已经实现的游戏中形成线程的最佳方法。游戏非常简单,你必须操纵你的宇宙飞船来躲避即将到来的墙壁。
目前,我的代码只是循环通过,直到飞船爆炸。由这个while循环表示(如果游戏结束,notBlownUp()返回false ):
while(notBlownUp()) {
osSignalSet(tid_taskDisplay, 1U);
}因此,这设置了taskDisplay()的信号
void taskDisplay(void const *argument){
for (;;) {
osSignalWait(1U, osWaitForever);
drawEverything();
osSignalSet(tid_taskWall, 1U);
osSignalSet(tid_taskSpaceship, 1U);
}
}
void taskDisplay(void const *argument);
osThreadId tid_taskDisplay;
osThreadDef(taskDisplay, osPriorityAboveNormal, __FI, 0);所有taskWall和taskSpaceship do都是根据用户输入更新宇宙飞船:
void taskSpaceship(void const *argument){
for (;;) {
osSignalWait(1U, osWaitForever);
updateSpaceship();
}
}
osThreadId tid_taskSpaceship;
osThreadDef(taskSpaceship, osPriorityAboveNormal, __FI, 0);taskWall与taskSpaceship完全相同,只是更新了墙。
我的问题是,一个接一个的线程有什么意义?还是我做错了?
代码基本上是按照以下顺序执行的:
taskDisplay -> taskWall -> taskSpaceship -> taskDisplay -> taskWall -> taskSpaceship
对我来说,它的顺序性让我觉得我用错了线程!
发布于 2017-05-09 20:25:26
通常您需要事件驱动的代码,类似于:
时钟滴答事件->游戏物理根据经过的时间更新移动部件
键盘事件->处理用户输入
这样,事件驱动的线程就可以以任何顺序执行。
https://stackoverflow.com/questions/43878664
复制相似问题