gpt4 book ai didi

c++ - 如何在特定时间后从 `std::cin` 超时读取

转载 作者:IT王子 更新时间:2023-10-29 00:49:57 24 4
gpt4 key购买 nike

我写了一个小程序,

int main(int argc, char *argv[])
{
int n;
std::cout << "Before reading from cin" << std::endl;

// Below reading from cin should be executed within stipulated time
bool b=std::cin >> n;
if (b)
std::cout << "input is integer for n and it's correct" << std::endl;
else
std::cout << "Either n is not integer or no input for n" << std::endl;
return 0;
}

std::cin 读取是阻塞的,因此程序会一直等待,直到程序有外部中断(也像信号)或用户提供一些输入。

我应该如何声明 std::cin >> n 等待用户输入一段时间(可能使用 sleep() 系统调用)?如果用户没有提供输入,并且在规定的时间(比如说 10 秒)完成后,程序应该继续执行下一条指令(即 if (b==1) 语句向前)。

最佳答案

这对我有用(注意这在 Windows 下不起作用):

#include <iostream>
#include <sys/select.h>

using namespace std;

int main(int argc, char *argv[])
{
int n;
cout<<"Before performing cin operation"<<endl;

//Below cin operation should be executed within stipulated period of time
fd_set readSet;
FD_ZERO(&readSet);
FD_SET(STDIN_FILENO, &readSet);
struct timeval tv = {10, 0}; // 10 seconds, 0 microseconds;
if (select(STDIN_FILENO+1, &readSet, NULL, NULL, &tv) < 0) perror("select");

bool b = (FD_ISSET(STDIN_FILENO, &readSet)) ? (cin>>n) : false;

if(b==1)
cout<<"input is integer for n and it's correct"<<endl;
else
cout<<"Either n is not integer or no input for n"<<endl;

return 0;
}

关于c++ - 如何在特定时间后从 `std::cin` 超时读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18552029/

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