プログラムの実行をブロックすることなくユーザー入力を得るために、C++標準入力ストリームcinを使用しようとしています。ブロックせずに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
ここでの考え方は他とすぐに、ユーザは(1つのスレッドですべての)私たちは、入力を処理する入力を提供するような何かをしながらブロックせずにユーザの入力を待つことです:私はこのコードを持っています。私はドキュメントから、入力ストリームで使用されるstreambufクラスがin_avail()関数を提供することを知っています。この関数はバッファに入力が準備されているときにゼロ以外の値を返します。上記のコードは私が期待していたように動作していないし、ある時点でキーボード入力を提供しても永遠にループしています。私はWindows 7でMS Visual Studio 2005を使用しています。私はここで何が欠けていますか?
[ノンブロッキングコンソール入力C++]の重複の可能性があります(http://stackoverflow.com/questions/6171132/non-blocking-console-input-c) – Pierre
in_availは必要な処理を行いません。あなたが複数のスレッドに対処しない限り、標準のC++ライブラリ*を使ってほしいものを行う方法はありません。 –
@ n.mなぜこのような場合にin_availが私の望むことをしないのか少し説明できますか? –