如何在输入时执行命令?

时间:2013-09-17 15:07:41

标签: c++

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


这样的事情:

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

    //...     
}


<小时/>

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


修改
感谢所有建议:)

4 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:2)

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

  1. 多线程
  2. 异步IO
  3. 对于您提到的用例(聊天),我建议您查看第二个选项。您可能需要查看boost asio的文档,其中包含聊天客户端和服务器的示例。

答案 2 :(得分:1)

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

答案 3 :(得分: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]:~$