如何在等待输入时执行某些命令?
这样的事情:
while(/*taking input*/) {
sleep(15);
cout<<"You still there?";
//...
}
因此它要求输入,但是当它等待按下ENTER时它会执行命令
可能吗?
修改:
感谢所有建议:)
答案 0 :(得分:3)
使用C ++ 11线程工具,您可以简单地生成一个“工作”线程,在您等待输入时完成工作。
std::async
是一种异步获取操作结果的简单方法;你的问题描述不是很精确,所以我不知道我还能在这里添加什么。
可以在没有线程的情况下完成,但是您需要对输入进行异步访问,这通常不是跨平台的。
在马丁的评论之后,我实际上更清楚地看到了问题;在这种情况下,您最好的选择可能是寻找更抽象的IO API,它们将提供非阻塞输入,或者根据特定于操作系统的API创建您自己的API。
答案 1 :(得分:2)
有两种方法可以实现您的目标:
对于您提到的用例(聊天),我建议您查看第二个选项。您可能需要查看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]:~$