是否可以为 std::cin 设置超时?
例如,std::cin 在 10 秒内没有收到任何数据 - 它会引发异常或返回错误。
Edited:
那么定时器呢Boost library
?据我所知,它是便携式图书馆。是否可以要求 Boost 库的计时器在预定义的时间段后抛出异常?我想它可以解决这个问题。
无法设置超时时间std::cin
以便携的方式。即使诉诸非便携式技术,这样做也不是完全微不足道的:您将需要替换std::cin
的流缓冲区。
在 UNIX 系统上,我将替换使用的默认流缓冲区std::cin
通过使用文件描述符的自定义文件0
读取输入。要实际读取输入,我会使用poll()
检测输入的存在并为此函数设置超时。取决于结果poll()
我要么读取可用的输入,要么失败。然而,为了可能处理未转发到文件描述符的键入字符,关闭在输入换行符之前完成的缓冲可能是合理的。
使用多个线程时,您可以创建一个可移植的过滤流缓冲区,该缓冲区使用一个线程读取实际数据,另一个线程使用定时条件变量,等待第一个线程发出其收到数据的信号或超时到期。请注意,您需要防止虚假唤醒,以确保在没有输入时确实达到超时。这将避免修改数据读取的实际方式std::cin
尽管它仍然取代了使用的流缓冲区std::cin
使功能可以通过此名称访问。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)