首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RTOS和使用线程

RTOS和使用线程
EN

Stack Overflow用户
提问于 2017-05-09 19:46:01
回答 1查看 254关注 0票数 0

所以我有点搞不懂我已经实现的游戏中形成线程的最佳方法。游戏非常简单,你必须操纵你的宇宙飞船来躲避即将到来的墙壁。

目前,我的代码只是循环通过,直到飞船爆炸。由这个while循环表示(如果游戏结束,notBlownUp()返回false ):

代码语言:javascript
复制
while(notBlownUp()) {   
    osSignalSet(tid_taskDisplay, 1U);   
}

因此,这设置了taskDisplay()的信号

代码语言:javascript
复制
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 do都是根据用户输入更新宇宙飞船:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2017-05-09 20:25:26

通常您需要事件驱动的代码,类似于:

时钟滴答事件->游戏物理根据经过的时间更新移动部件

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43878664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档