pan*_*ter 4 c++ select synchronization network-programming
我正在尝试使用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;
}
Run Code Online (Sandbox Code Playgroud)
小智 14
per man:select()可以更新超时参数以指示剩余时间.pselect()不会改变这个参数.
这意味着如果它在2秒后超时,则可以将tv_sec设置为0.
如果timeval的两个字段都是0,它将立即返回.
尝试在while()内的每个循环中设置超时,以确保它不会被覆盖.
| 归档时间: |
|
| 查看次数: |
10751 次 |
| 最近记录: |