如何在接受输入时执行命令

How to execute commands WHILE taking input?

本文关键字:执行 命令 输入      更新时间:2023-10-16
如何在

等待输入时执行某些命令?


像这样:

while(/*taking input*/) {
    sleep(15);
    cout<<"You still there?";
    //...     
}



因此,它要求输入,但在等待按下 ENTER 时,它会执行命令。
可能吗?


编辑
感谢您的所有建议:)

使用 C++11 线程工具,您可以简单地生成一个"worker"线程,该线程在您等待输入时完成工作。

std::async是异步获取操作结果的简单方法;您的问题描述不是很精确,所以我不知道我还可以在这里添加什么。

它可以在没有线程的情况下完成,但是您需要对输入进行异步访问,这通常不是跨平台的。

在Martin的评论之后,我实际上更清楚地看到了问题;在这种情况下,你最好的选择可能是寻找更抽象的IO API,它将提供非阻塞输入,或者基于特定于操作系统的API创建自己的API。

有两种方法可以实现您的目标:

  1. 多线程
  2. 异步 IO

对于您提到的用例(聊天),我建议研究第二个选项。您可能想查看 boost asio 的文档,其中包含聊天客户端和服务器的示例。

你想生成另一个线程,与等待 I/O 的线程并行运行(在本例中来自 stdin 的输入)。 在等待生成的线程中的 I/O 时运行您想要执行的任何操作。看看提升线程

如果您允许在细分受众群之外添加内容,它将起作用:

[wolf@Targaryen]:~$ cat main.cpp 
#include <iostream>
#include <string>
using namespace std;
int main() {
  string s;
  while( getline(cin, s) and s != "" ) {
    cout << "You still there?" << endl;
  }
}
[wolf@Targaryen]:~$ r
adb
You still there?
sfcetgw
You still there?
wefew
You still there?
[wolf@Targaryen]:~$