我正在尝试使用 select 函数来接受输入,但如果用户没有输入任何内容,则每 2 秒执行一次其他操作。下面的代码在第一次到达 select() 时等待两秒,但是一旦打印出第一个“超时”消息,它就会快速继续打印“超时”而不等待 2 秒,基本上进入无限循环。有人知道问题是什么吗?谢谢你的帮助。
#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
using namespace std;
const int STDIN = 0;
int main(int argc, int *argv[])
{
struct timeval tv;
fd_set readfds, master;
tv.tv_sec = 2;
tv.tv_usec = 0;
FD_ZERO(&readfds);
FD_ZERO(&master);
FD_SET(STDIN, &readfds);
FD_SET(STDIN, &master);
string buffer = "";
while(buffer != "quit"){
readfds = master;
if(select(STDIN+1, &readfds, NULL, NULL, &tv) == -1) perror("select");
if (FD_ISSET(STDIN, &readfds)){
getline(cin, buffer);
cout << "You entered: " << buffer << endl;
}else
cout << "Timed out.\n" << endl;
}
return 0;
}
每个人: select() 可能会更新超时参数以指示还剩多少时间。 pselect() 不会更改此参数。
这意味着如果 2 秒后超时,它可能会将您的 tv_sec 设置为 0。
如果 timeval 的两个字段都为 0,则立即返回。
尝试在 while() 内的每个循环中设置超时,以确保它不会被覆盖。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)