gpt4 book ai didi

c - RTOS 和使用线程

转载 作者:行者123 更新时间:2023-11-30 16:46:06 26 4
gpt4 key购买 nike

所以我对为我实现的游戏形成线程的最佳方法有点困惑。游戏非常简单,你必须操纵你的飞船来躲避来袭的墙壁。

目前我的代码只是循环执行,直到宇宙飞船爆炸。以此 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);

所有 taskWalltaskSpaceship 所做的都是根据用户输入更新宇宙飞船:

void taskSpaceship(void const *argument){

for (;;) {
osSignalWait(1U, osWaitForever);
updateSpaceship();
}
}
osThreadId tid_taskSpaceship;
osThreadDef(taskSpaceship, osPriorityAboveNormal, __FI, 0);

taskWalltaskSpaceship 完全相同,只是更新了墙。

我的问题是,当线程只是一个接一个地执行时,线程有什么意义呢?或者我只是这样做完全错误?

代码基本上按以下顺序执行:

taskDisplay ->taskWall ->taskSpaceship ->taskDisplay ->taskWall ->taskSpaceship

对我来说,它的顺序性让我觉得我使用的线程是错误的!

最佳答案

通常您需要事件驱动的代码,例如:

时钟滴答事件 -> 游戏物理根据耗时更新移动的棋子

键盘事件 -> 处理用户输入

这样事件驱动的线程就可以按任意顺序执行。

关于c - RTOS 和使用线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43878664/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com