首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将参数传递给多线程时的函数

将参数传递给多线程时的函数
EN

Stack Overflow用户
提问于 2013-12-18 13:18:07
回答 2查看 146关注 0票数 0

我有一个任务来创建一个游戏,像青蛙(你知道-青蛙必须横过街道的游戏)。到目前为止,我已经创造了青蛙和汽车运动背后的逻辑,但我似乎不能同时运行这些过程。我知道多线程是正确的方法,但我在通过_beginthread传递参数时遇到了一些困难。

到目前为止,我的情况如下:

代码语言:javascript
复制
void moveCarsLeft(int x, int y) {
    if (y < 0) {
        field[x][y + 4] = '_';
        Sleep(600);
        refreshField();
        showField();
        if (y == -4) {
            moveCarsLeft(x, WIDTH-1);
        }
        moveCarsLeft(x, y - 1);
    }
    else {
        if (y > WIDTH-4) {
            field[x][y] = '-';
            Sleep(600);
            refreshField();
            showField();
            moveCarsLeft(x, y - 1);
        }
        else {
            field[x][y + 4] = '_';
            field[x][y] = '-';
            Sleep(600); // this is what's messing up the whole thing
                        // it stops the whole program
                        // and that's why I think I need multithreading
            refreshField();
            showField();
            moveCarsLeft(x, y - 1);
        }
    }
}

void moveCarsRight(int x, int y) {
... // the opposite of moveCarsLeft()
}

...
int main() {
...
    _beginthread(moveCarsLeft, 0, what do I put here?);
...
}

因此,如果有人能告诉我实现此功能的正确方法,我将非常感激。预先谢谢:]

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-12-18 13:21:35

你不需要多线程..。一个典型的老式游戏引擎是:

代码语言:javascript
复制
while(1)
{
   userInput = ReadUserInput();
   currentGameStatus = UpdateGameStatus(oldGameStatus, userInput);
   DrawScreen(currentGameStatus);
   oldGameStatus = currentGameStatus;
}

当然,这只是伪代码来掌握基本思想.

但是,如果您想使用多线程,您可以使用一个共享游戏状态容器,运行中的线程可以访问和/或修改这个容器(您需要使用一些互斥保护关键部分)。

如果您使用多线程,那么预期会出现一些小的并发问题(例如,青蛙在屏幕上实际发生之前被汽车碾过),因为您丢失了游戏一步一步进行的单一循环给出的完美状态顺序。

票数 4
EN

Stack Overflow用户

发布于 2013-12-18 13:52:13

“我在这里放什么?”

你放了一个指向结构的指针。定义结构以包含要传递的所有参数。

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

https://stackoverflow.com/questions/20659296

复制
相关文章

相似问题

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