Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在c+;中执行另一个while循环时,如何获取流输入+; 我正在编写一个C++游戏,用来从用户那里获取输入,并显示命令行终端上玩家的连续变化的状态。我使用while循环不断更新玩家的健康状况(一个数字值),它通过一个小状态栏打印到屏幕上。它每秒循环多次,给游戏带来实时感。当程序运行时,我希望即使我与游戏交互,该值也能不断更新。例如,我希望在不中断我的小状态显示循环的情况下发出“吃东西”或“砍柴”之类的命令。我在设计此部件的功能时遇到问题。当我与游戏互动时,如何保持状态更新?我担心的是,当用户在终端中输入内容时,while循环被暂停,状态不再继续更新。我在寻找一些通用的指针,而不是实际的代码。我真的很感激。我对编程相当陌生_C++_Multithreading_While Loop_Nonblocking_Pdcurses - Fatal编程技术网

在c+;中执行另一个while循环时,如何获取流输入+; 我正在编写一个C++游戏,用来从用户那里获取输入,并显示命令行终端上玩家的连续变化的状态。我使用while循环不断更新玩家的健康状况(一个数字值),它通过一个小状态栏打印到屏幕上。它每秒循环多次,给游戏带来实时感。当程序运行时,我希望即使我与游戏交互,该值也能不断更新。例如,我希望在不中断我的小状态显示循环的情况下发出“吃东西”或“砍柴”之类的命令。我在设计此部件的功能时遇到问题。当我与游戏互动时,如何保持状态更新?我担心的是,当用户在终端中输入内容时,while循环被暂停,状态不再继续更新。我在寻找一些通用的指针,而不是实际的代码。我真的很感激。我对编程相当陌生

在c+;中执行另一个while循环时,如何获取流输入+; 我正在编写一个C++游戏,用来从用户那里获取输入,并显示命令行终端上玩家的连续变化的状态。我使用while循环不断更新玩家的健康状况(一个数字值),它通过一个小状态栏打印到屏幕上。它每秒循环多次,给游戏带来实时感。当程序运行时,我希望即使我与游戏交互,该值也能不断更新。例如,我希望在不中断我的小状态显示循环的情况下发出“吃东西”或“砍柴”之类的命令。我在设计此部件的功能时遇到问题。当我与游戏互动时,如何保持状态更新?我担心的是,当用户在终端中输入内容时,while循环被暂停,状态不再继续更新。我在寻找一些通用的指针,而不是实际的代码。我真的很感激。我对编程相当陌生,c++,multithreading,while-loop,nonblocking,pdcurses,C++,Multithreading,While Loop,Nonblocking,Pdcurses,我是否必须使用多个线程,或者当用户在屏幕上输入文本时,while循环是否有办法继续运行?谢谢你的指点。我希望这不是一个太令人困惑的问题 FWIW,这是我到目前为止的伪代码: #include //....some files.... int main() { // Initialize game objects and graphics bool programRunning = true; float playerEnergy = 3000.0; initscr(); /

我是否必须使用多个线程,或者当用户在屏幕上输入文本时,while循环是否有办法继续运行?谢谢你的指点。我希望这不是一个太令人困惑的问题

FWIW,这是我到目前为止的伪代码:

#include //....some files....
int main() {

// Initialize game objects and graphics
bool programRunning = true;
float playerEnergy = 3000.0;

initscr();          /* Start curses mode          */
while (programRunning)
{
    // Display some graphics
    // Display playerEnergy
    // Set the while loop speed using std::this_thread::sleep_for...
    playerEnergy -= 0.01;

    int ch;
    ch = getch();

    switch (ch) {
        case 'e':  //eat food
            playerEnergy += 1000;
            // Do some stuff
            break;
        case 'w':  //do some work
            playerEnergy -= 1000;
            // Do some stuff
            break;

        /* Etc, Etc.  */

        default:
            break;
        }

    // If player quits, set programRunning to false
}

endwin();           /* End curses mode        */
return 0;

}

正如您所建议的,多线程是我在这里的方式


我发现使用
getch
可以解决您的问题,如果您使用:
nodelay(stdscr,TRUE)进行非阻塞调用但我自己没有使用过它,这取决于你在做什么,但我通常喜欢
halfdelay()
——它让你拥有无阻塞输入,而不必将CPU固定在100%。或者,您可以使用
nodelay()
并在适当的时候手动调用
napms()

谢谢!我在问这个问题之前搜索了一下,但显然错过了一个几乎问同样问题的问题。干杯