使用C ++ / Boost绕过阻塞输入流

时间:2011-11-07 17:30:54

标签: c++ multithreading boost

我正在写一些测验程序。此程序向用户抛出问题,直到指定的时间限制用完为止。它现在如何设置是在一个提升线程中运行的测验功能,时序方面由该线程上的timed_join()处理。我遇到的问题是当用户使用cin回答问题时,该线程将超过已建立的时间限制。有没有办法让它打断cin电话?

3 个答案:

答案 0 :(得分:2)

您可以使用getchargetchgetche在非阻止性阅读中逐字阅读输入字符。如果你已经循环足够长的时间来达到超时,那么停止循环:)。

答案 1 :(得分:2)

您可以Boost.Asio使用here异步读取所述here - 示例代码的更新链接为{{3}}。

答案 2 :(得分:0)

您可能需要使用其他输入法。 readline库可能能够帮助您。或者,如果您使用的是Linux,则可以转到纯文件描述符,像非阻塞套接字一样使STDIN_FILENO无阻塞并使用select系统调用,然后您可以获得两个超时并知道什么时候输入就绪。