【发布时间】:2016-07-25 03:48:00
【问题描述】:
我正在尝试使用 c++ 标准输入流 cin 来获取用户输入,而不会阻止程序的执行。我有这个代码:
char ch;
int flag=1;
do
{
if(cin.rdbuf()->in_avail())
{
cin.get(ch);
flag=0;
}
else
//do something else
}while(flag);
//do something with the input
这里的想法是在做其他事情时等待用户输入而不阻塞,一旦用户提供输入,我们就会处理输入(全部在一个线程中)。我从文档中知道输入流使用的 streambuf 类提供了 in_avail() 函数,当缓冲区中有输入就绪时,该函数将返回一个非零值。上面的代码没有像我预期的那样工作,即使我在某个时候提供了键盘输入,它也会永远循环。我在 Windows 7 中使用 MS Visual Studio 2005。我在这里缺少什么?
【问题讨论】:
-
in_avail 没有做你想做的事。仅使用标准 C++ 库除非您愿意处理多个线程,否则无法做您想做的事情。
-
@n.m 你能解释一下为什么 in_avail 在这种情况下不做我想做的事吗?
-
in_avail 处理 buffer(streambuf 中的“buf”)。它告诉您有多少已被输入数据填充但尚未消耗。缓冲区不是用魔法填充的,它是通过调用读取操作来填充的。此操作会阻塞。
-
@n.m 谢谢。明白了。