【发布时间】:2011-11-07 17:30:53
【问题描述】:
我目前正在编写一些测验程序。该程序向用户提出问题,直到指定的时间限制用完。现在它的设置方式是测验功能在提升线程中运行,并且计时方面由该线程上的 timed_join() 处理。我遇到的问题是当用户使用 cin 回答问题时,线程将超过已建立的时间限制。有没有办法让它中断 cin 调用?
【问题讨论】:
标签: c++ multithreading boost
我目前正在编写一些测验程序。该程序向用户提出问题,直到指定的时间限制用完。现在它的设置方式是测验功能在提升线程中运行,并且计时方面由该线程上的 timed_join() 处理。我遇到的问题是当用户使用 cin 回答问题时,线程将超过已建立的时间限制。有没有办法让它中断 cin 调用?
【问题讨论】:
标签: c++ multithreading boost
您可以使用Boost.Asio 异步读取cin,如here 所述 - 示例代码的更新链接为here。
【讨论】:
您可以使用getchar、getch 或getche 在非阻塞读取中逐个字符地读取输入。如果您已经循环足够长的时间以达到超时,请停止循环:)。
【讨论】:
您可能需要使用其他输入法。 readline 库也许可以帮助您。或者,如果您在 Linux 上,您可以使用纯文件描述符,使 STDIN_FILENO 像非阻塞套接字一样非阻塞并使用 select 系统调用,然后您可以获得超时并知道何时输入准备好了。
【讨论】: