【问题标题】:Bypassing blocking input stream with C++/Boost使用 C++/Boost 绕过阻塞输入流
【发布时间】:2011-11-07 17:30:53
【问题描述】:

我目前正在编写一些测验程序。该程序向用户提出问题,直到指定的时间限制用完。现在它的设置方式是测验功能在提升线程中运行,并且计时方面由该线程上的 timed_join() 处理。我遇到的问题是当用户使用 cin 回答问题时,线程将超过已建立的时间限制。有没有办法让它中断 cin 调用?

【问题讨论】:

    标签: c++ multithreading boost


    【解决方案1】:

    您可以使用Boost.Asio 异步读取cin,如here 所述 - 示例代码的更新链接为here

    【讨论】:

      【解决方案2】:

      您可以使用getchargetchgetche 在非阻塞读取中逐个字符地读取输入。如果您已经循环足够长的时间以达到超时,请停止循环:)。

      【讨论】:

      • +1 为简单起见。对于小项目,我会这样做。
      【解决方案3】:

      您可能需要使用其他输入法。 readline 库也许可以帮助您。或者,如果您在 Linux 上,您可以使用纯文件描述符,使 STDIN_FILENO 像非阻塞套接字一样非阻塞并使用 select 系统调用,然后您可以获得超时并知道何时输入准备好了。

      【讨论】:

        猜你喜欢
        • 2016-07-25
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        • 2012-12-29
        • 2010-10-01
        • 1970-01-01
        • 2011-12-23
        相关资源
        最近更新 更多