2011-04-20 62 views
2

我正在尋找一種在X秒後跳過用戶輸入的方法。是否可以在指定的時間後繞過std :: cin?

喜歡的東西:

std::cout << "Enter a number \n"; 
timer(5000) 
{ 
     std::cin >> number; 
} 
//the rest of the program. 

像這樣的東西存在嗎?

+0

您希望使用哪些系統? – 2011-04-20 04:37:50

+0

@jerry Windows XP/7 – 2011-04-20 04:41:02

回答

4

我敢肯定沒有任何東西甚至接近便攜。對於這個問題,可能沒有什麼可以直接與iostreams一起工作。

鑑於您需要Windows,您可以直接使用控制檯API。特別是,您可以在標準輸入句柄上使用WaitForSingleObject,並給出超時時間:

HANDLE standard_input = GetStdHandle(STD_INPUT_HANDLE); 

if (WaitForSingleObject(standard_input, 5000) == WAIT_OBJECT_0) 
    // read what the user entered 
else 
    // timed out (or otherwise failed). 
+0

是否有我需要包含的預處理器指令?我收到有關範圍的錯誤。 – 2011-04-20 04:53:37

+0

你需要'#include '。 – 2011-04-20 04:56:40

+0

非常感謝!有沒有一個網站能夠解釋這件事的確切含義,所以我比深深地瞭解它更深刻。 – 2011-04-20 04:58:58

2

不是真的:即使此輸入在單獨的線程上執行,operator>>()不是取消點。

但是,只是爲了好玩,這裏是一個使用Boost.Asio的一個人爲的方法:

#include <iostream> 
#include <boost/asio.hpp> 
#include <boost/bind.hpp> 
#include <boost/thread.hpp> 
boost::asio::streambuf readbuffer(100); 
int n = 0; 
void readhandler(const boost::system::error_code& error, 
       size_t bytes_transferred) 
{ 
    if(!error) 
    { 
     const char* buf = boost::asio::buffer_cast<const char*>(readbuffer.data()); 
     std::string result(buf, bytes_transferred); 
     std::istringstream is(result); 
     is >> n; 
    } 
} 
int main() 
{ 
    boost::asio::io_service ioserv; 
    boost::asio::posix::stream_descriptor streamdesc(ioserv); 
    streamdesc.assign(0); // filedesc of stdin 
    streamdesc.async_read_some(
        readbuffer.prepare(readbuffer.max_size()), 
        boost::bind(readhandler, boost::asio::placeholders::error, 
           boost::asio::placeholders::bytes_transferred)); 
    std::cout << "You have 5 seconds to enter a number: " << std::flush; 
    boost::thread server(boost::bind(&boost::asio::io_service::run, &ioserv)); 
    boost::this_thread::sleep(boost::posix_time::seconds(5)); // or timed_wait 
    ioserv.stop(); 
    server.join(); 
    std::cout << "The number entered was " << n << '\n'; 
} 
相關問題