c++ - 多线程时将参数传递给函数

标签 c++ multithreading function parameters beginthread

<分区>

我有一项任务是创建像 Frogger 这样的游戏(您知道 - Frog 必须过马路的游戏)。到目前为止,我已经创建了 Frog 和汽车运动背后的逻辑,但我似乎无法同时运行这些过程。我知道多线程是执行此操作的正确方法,但我在通过 _beginthread 传递参数时遇到了一些问题。

这是我目前所拥有的:

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?);
...
}

所以,如果有人能告诉我实现此功能的正确方法,我将不胜感激。提前致谢:]

最佳答案

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

while(1)
{
   userInput = ReadUserInput();
   currentGameStatus = UpdateGameStatus(oldGameStatus, userInput);
   DrawScreen(currentGameStatus);
   oldGameStatus = currentGameStatus;
}

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

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

如果您使用多线程,那么预计会出现一些小的并发问题(例如, Frog 在实际出现在屏幕上之前就被汽车碾过,或者相反),因为您失去了游戏在其中的单个循环所提供的完美状态顺序性循序渐进

关于c++ - 多线程时将参数传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20659296/

相关文章:

c++ - 如何转移 boost::ptr_vector 元素的所有权?

java - 在多线程应用程序中生成相同的 UUID

使用 HashMap 实现多线程的 Java 单例同步

javascript - Angular 传递变量

c++ - 推断函数指针的模板参数

java - SWIG - 如何忽略我不需要公开的 C++ 类(在 Java 中)?

c++ - 代码片段的页面错误

python - 在线程上调用时,Python函数无法开始执行

jQuery - 函数在没有被告知的情况下运行,请告知

function - 如何创建包级函数?