当询问用户输入时,我们需要调用阻止功能,但我希望能够#34;取消阻止"并在指定的超时(通常是几秒)后恢复。
我该怎么做?
std::string s;
// blocking function call
std::cin >> s; // how can I resume operation after timeout duration has elapsed?
答案 0 :(得分:3)
你不能按照梦想的方式行事,至少不能在标准 C ++ 11中使用(仅使用标准化的C ++ 11函数)。您实际上需要一些operating system支持,并且您隐含地需要一些event loop(或使用一些多threading方法。)
但是,您可以使用操作系统设施和/或一些外部库。
FWIW,Linux有多路复用syscalls,例如poll(2)(我确信Windows,Android,MacOSX,....有类似的东西);但是您可以更好地使用ncurses或Qt或SFML等库(另请参阅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。