阻止函数调用的超时,即如何在X秒后停止等待用户输入?

时间:2015-12-05 16:44:15

标签: c++ io timeout

当询问用户输入时,我们需要调用阻止功能,但我希望能够#34;取消阻止"并在指定的超时(通常是几秒)后恢复。

我该怎么做?

std::string s;
// blocking function call
std::cin >> s; // how can I resume operation after timeout duration has elapsed?

2 个答案:

答案 0 :(得分:3)

你不能按照梦想的方式行事,至少不能在标准 C ++ 11中使用(仅使用标准化的C ++ 11函数)。您实际上需要一些operating system支持,并且您隐含地需要一些event loop(或使用一些多threading方法。)

但是,您可以使用操作系统设施和/或一些外部库。

FWIW,Linux有多路复用syscalls,例如poll(2)(我确信Windows,Android,MacOSX,....有类似的东西);但是您可以更好地使用ncursesQtSFML等库(另请参阅POCO框架)。

详细信息比您想象的要复杂得多,并且是特定于操作系统的(但有些库是在多个操作系统上运行的框架)。另见this& that回答并阅读tty demystified页面。请注意" terminal"今天通常是一些抽象的虚拟设备,但过去一直是一个复杂的设备(今天大多是模拟的)。

并且不要忘记cin可能不是终端。它可能是(特别是在POSIX系统上)pipe(7)(命令pipeline)或文件(redirection)。然后等待5秒可能毫无意义或无用。

答案 1 :(得分:0)

您可以使用main()编写一个程序,使用process1()功能创建2个流程process2()fork()

process1()中输入表单用户。

process2()中,如您所说的那样延迟X秒,然后通过process2终止process1。