Передача параметров в функцию при многопоточности

У меня есть задание создать игру, подобную Frogger (вы знаете, игру, в которой лягушка должна переходить улицу). До сих пор я создал логику движения лягушки и машин, но я не могу запустить процессы одновременно. Я знаю, что многопоточность - верный способ сделать это, но у меня возникли проблемы с передачей параметров через _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?);
...
}

Поэтому я был бы очень признателен, если бы кто-нибудь сказал мне правильный способ достижения этой функциональности. Заранее спасибо: ]

2 ответа

Решение

Вам не нужно многопоточность... типичный игровой движок старого стиля:

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

конечно, это просто псевдокод, чтобы понять основную идею...

однако, если вы хотите использовать многопоточность, вы можете использовать общий контейнер состояния игры, к которому работающие потоки могут обращаться и / или изменять (вам нужно защитить критические секции с помощью нескольких мьютексов).

Если вы используете многопоточность, то ожидайте незначительных проблем с параллелизмом (например, лягушку, которую машина сбивает до того, как это произойдет на экране, или наоборот), потому что вы потеряли идеальную последовательность состояний, заданную одним циклом, в котором игра продолжается пошагово. шагом

"что я здесь положу?"

Вы помещаете указатель на структуру. Вы определяете структуру, которая будет содержать все параметры, которые вы хотите передать.

Другие вопросы по тегам