我有一个计时器线程,将来会执行五秒钟,并有一个循环来等待它完成执行。然后程序在用户点击进入时结束。我注意到在等待循环时,输入被接受到输入缓冲区,并用于完成程序,任何后续输入命中都输入到命令行!
我想忽略在“按Enter退出”之前输入的所有输入,包括输入。自从我使用C ++以来已经有一段时间了,我不记得如何做到这一点(我已经搜索过SO和Google,但找不到这个具体问题的答案)。这是我的例子:
std::cout << "Timer test: wait 5 seconds\n";
boost::asio::io_service test_io;
deadline_timer test_timer(test_io, posix_time::seconds(5));
int testInt = 0;
auto asynctest = [&testInt](const boost::system::error_code&) {
std::cout << "Running asynctest()\n";
testInt = 5;
};
std::cout << "Starting asynchtest, which should output in 5 seconds\n";
test_timer.async_wait(boost::bind<void>(asynctest, boost::asio::placeholders::error));
while(testInt != 5) {
std::cout << ". ";
boost::this_thread::sleep(boost::posix_time::milliseconds(200));
}
// How do I clear all input from the input stream here so that if the user hit enter
// during the timer countdown it will be cleared and user still must hit enter to
// exit program?
std::cout << "Press enter to exit\n";
std::cin.ignore(80, '\n');
return 1;
ADSF
答案 0 :(得分:2)
在纯粹的C ++级别上无法做到这一点;你不得不放弃
到操作系统级别,或使用一些第三方库,如curses(或
也许是一些异步IO库,如果你可以让他们阅读cin
异步)。