【问题标题】:Wait for input while running运行时等待输入
【发布时间】:2019-05-08 06:53:36
【问题描述】:

我正在尝试使用 c++ 控制台应用程序创建游戏

我的目标是让我的do .. while() 在等待回复时运行。 它应该一直显示“..O..”,直到按下“a”键,然后显示“.O...”,或者当按下“d”键时显示“...O”。 我的问题是我不能在不暂停应用程序等待输入的情况下使用cingetline

那么有没有办法做类似循环的事情,如果 cin 在 10 毫秒内没有返回一个值,它会打印“..O..”? 我不希望程序一直等待输入,可能就像每个 cin 之间的 Sleep(10) ...

我对它的外观的想法:

void out()
{
    int x;
    string key;
    do {
        cin >> key;
        //insert here something like break; that will
        //stop waiting for input after 10 milliseconds.
        system("cls");
        if (key != "a" && key != "d") {
            cout << "..O..";
        }
        else {
            if (key == "a") {
                cout << ".O..." << endl;
            }
            else {
                if (key == "d") {
                    cout << "...O." << endl;
                }
                else {
                    cout << "..O..";
                }
            }
        }
    } while (x == 0);
    x = 0;
}

【问题讨论】:

  • 您很可能需要将您的输入放在另一个线程上。我建议阅读this post 看看是否有帮助。
  • @Root0x 我阅读了链接,但我不知道如何开始多线程甚至线程。也许给我发一个链接,说明它们是什么以及它们是如何工作的?谢谢。

标签: c++ game-engine iostream cin


【解决方案1】:

在您的问题中,如果没有提供输入,应用程序必须处于初始位置,因此需要重新排序

void out()
{
    int x;
    string key;
    do {
        system("cls");
        cout << "..O..";

        cin >> key; //output will remain same as long as no input

        system("cls");
        if (key == "a") {
           cout << ".O..." << endl;
        }
        else if (key == "d") {
           cout << "...O." << endl;
        }

    } while (x == 0);
    x = 0;
}

【讨论】:

  • 谢谢。我在想如果我这样做if (key == key) {std::cout &lt;&lt; "..O.." &lt;&lt; endl;,这样如果没有密钥,它就会恢复。我非常感谢你:D
  • @PhonedLeek25RedstoneWorks,不客气 :),老实说,我不明白你的评论。
  • 我刚刚尝试过,但它失败了,它仍在等待输入。我希望程序自动跳过 cin,如果在例如毫秒过去后没有收到输入
  • 顺便说一句,由于空间关系,我不能提及你,我该怎么办?它没有修复它我尝试运行它,但它仍然每次都等待输入。阅读我的最后一条评论。对不起:/虽然你可以再次回答,如果它有效,我会接受它:D如果你在你的答案中加入与线程相关的任何内容,那就太好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-06
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多