c++ - 如何在 C++ 中创建一个运行时间计数器并允许用户同时输入的循环(非阻塞用户输入)

标签 c++ nonblocking kbhit

所以,我想做的是在 C++ 中创建一个函数,允许用户在一定时间内将任何内容输入字符串(例如,十分钟(甚至一个))(并保留他们输入的所有内容,顺便说一句。我正在尝试设计一款游戏来帮助 NaNoWriMo 参与者或一般作者插入他们写作,因此保留所有内容是必不可少的)< strong>然后不允许再附加输入。一开始这听起来很容易,但五个小时的谷歌搜索证明并非如此。

首先,我认为我可以重复追加直到时间用完或其他什么。观察:

int main() //testing
{
    string str;
    string app = " ";
    getline(cin, app);

    for (int i = 0; i <= 3; i++)
    {
        Sleep(5000);
        cout << i << endl;
        str = " ";
        getline(cin, str);
        app.append(str);
    }

    cout << app;
}

但后来我意识到,duh,在用户按下 enter 之前,循环不会再次检查条件。麻烦。与我对角色的巧妙构想相同。我需要一个循环,它随着每个输入的字符(或过去的每一秒)而更新,无论用户输入另一个字符需要多长时间。

然后我想,“好吧,在每个空间停下来更新时间应该就足够了,是吗?”

这是我开始发现 C++ 在解析字符串或读取输入时表现不佳的时候。我考虑过追加每个字符,,因为这样很容易找到一个空格,但它仍然等待用户。

沮丧,我想知道是否有一种方法可以让程序在获取用户输入的同时运行,以便一旦时间用完(使用 time(null)、时间流逝、 time(null) 和减去两个变量以获得经过的秒数)。

事实证明,有! (考虑到所有使用此原理的计算机程序和游戏,我知道必须存在,但我对编程还很陌生(上周三我学习了函数,给你一个想法),所以我不知道什么。)

我偶然发现的第一个函数是 curses 和 ncurses,但我很快发现这对于我想做的事情来说真的不是一个可行的选择(因为我听说它会做一些很有趣的事情)。

然后 我偶然发现了 kbhit,它可以识别何时按下键盘上的键。 This blog看起来很有前途,可能也是我想做的,但我不确定它是用什么语言写的。 . .我所知道的是它不能很好地与我的 C++ IDE 配合使用。我不知道如何让它与 C++ 兼容。

所以,重申一下我想要的:

包含同时执行时间计数器和用户输入(对字符串),但在时间用完时终止(停止让用户进一步输入字符串)的循环。 (所有这些都没有对我的程序的其余部分做任何有趣的事情,就像 ncurses 那样。)

另外:我运行 Windows 8(我存在的祸根),我使用 Code::Blocks 作为我的 IDE。

或者,如果您知道了,这个问题已经在某个地方得到了回答。那实际上会很棒。找不到它只会让我觉得很傻。

(以下是我一路上看过的一些地方:

User input while program still running

How do I read input from standard input until a space or a tab is pressed?

Capture characters from standard input without waiting for enter to be pressed )

(我正在尝试创建的游戏,(还不是很远;我昨晚就开始了),以防你好奇:https://github.com/Rowan-Law/Dungeon-Crawl/blob/master/Source%20Code)

最佳答案

你可能想为时间创建一个线程,然后不断更新字符串直到时间线程返回

关于c++ - 如何在 C++ 中创建一个运行时间计数器并允许用户同时输入的循环(非阻塞用户输入),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28655833/

相关文章:

C++循环直到击键

c++ - "Destination address required"尝试通过 SOCK_RAW 套接字发送数据时

c++ - 在 Objective-C Mac App 中使用 TagLib(C++ 库)

java - Spring Boot 2 的非阻塞 IO

java - Scala 中的非阻塞读取,无需框架

c - 为什么使用不同的循环会得到不同的输出?

c - C 中 move 对象的函数 kbhit

c++ - 在跨 DLL 边界使用的类中使用字符串作为私有(private)数据成员是否安全?

c++ - 如何使用for循环从包含不同派生类的基类数组初始化对象?

Java NIO 复用服务器 : should I use worker threads to process requests?