3

如何在等待输入时执行一些命令?


像这样的东西:

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

    //...     
}



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


编辑
感谢所有建议:)

4

4 回答 4

3

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

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

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

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

于 2013-09-17T15:28:09.193 回答
2

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

  1. 多线程
  2. 异步 IO

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

于 2013-09-17T15:35:01.113 回答
1

您想生成另一个线程以与等待 i/o 的线程并行运行(在这种情况下来自 stdin 的输入)。在该生成的线程中等待 i/o 时运行您想做的任何事情。看看Boost 线程

于 2013-09-17T15:27:48.927 回答
0

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

[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]:~$
于 2013-09-17T15:52:58.743 回答