gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:37:28 28 4
gpt4 key购买 nike

当要求用户输入时,我们需要调用阻塞函数,但我希望能够“解除阻塞”并在指定的超时(通常是几秒)过去后恢复。

我该怎么做?

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

最佳答案

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

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

FWIW,Linux 具有多路复用 syscalls例如poll(2) (而且我确信 Windows、Android、MacOSX ……有类似的东西);但你最好使用像 ncurses 这样的库或 QtSFML (另请参阅 POCO 框架)。

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

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

关于c++ - 阻塞函数调用超时,即如何在 X 秒后停止等待用户输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34108024/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com