Luc*_*Man 12 c++ stdin timeout
是否可以为std :: cin设置超时?例如,std :: cin在10秒内没有收到任何数据 - 它会抛出异常或返回错误.
编辑:
那计时器Boost library呢?据我所知,它是便携式库.是否有可能要求Boost库的计时器在预定义的时间段后抛出异常?我想它可以解决这个问题.
无法以std::cin便携方式设置超时.即使采用非便携式技术,这样做也并非完全无关紧要:您需要替换std::cin流缓冲区.
在UNIX系统上,我将替换std::cin使用文件描述符0来读取输入的自定义缓冲区使用的默认流缓冲区.要实际读取输入,我将用于poll()检测输入的存在并在此函数上设置超时.根据结果,poll()我会读取可用输入或失败.为了可能处理未转发到文件描述符的类型字符,但是,在输入换行之前也可以关闭缓冲.
使用多个线程时,您可以创建一个可移植的过滤流缓冲区,它使用线程来读取实际数据,另一个线程使用一个定时条件变量,等待第一个线程发出信号表明它接收到数据或者超时到期.请注意,您需要防止虚假唤醒以确保在没有输入时确实达到了超时.这样可以避免必须修改数据的实际读取方式,std::cin尽管它仍然会替换使用的流缓冲区,std::cin以使该功能可通过此名称访问.