C++ select语句立即返回,而不是等待用户活动或套接字活动

C++ select语句立即返回,而不是等待用户活动或套接字活动,c++,select,C++,Select,我正在制作一个简单的游戏客户端。这个客户端需要处理来自服务器和用户的消息。在这个游戏中,唯一的输入是键盘按键。用户从未点击回车键,我认为这可能是导致问题的原因,但我不确定。以下是相关代码: FD_ZERO(&readfds); FD_ZERO(&writefds); FD_CLR(0,&readfds); FD_SET(c.retsock(),&readfds); // socket FD_SET(0, &readfds); // reads standa

我正在制作一个简单的游戏客户端。这个客户端需要处理来自服务器和用户的消息。在这个游戏中,唯一的输入是键盘按键。用户从未点击回车键,我认为这可能是导致问题的原因,但我不确定。以下是相关代码:

FD_ZERO(&readfds);
FD_ZERO(&writefds);
FD_CLR(0,&readfds);
FD_SET(c.retsock(),&readfds); // socket
FD_SET(0, &readfds); // reads standard input
cout << "waiting for activity..\n";
check = select(NULL, &readfds, &writefds, NULL, NULL);
if(FD_ISSET(0, &readfds)){
  cout << "User pressed key\n";
  gett = wait_for_key_typed();
  cout << "After waiting for key typed\n";
在我的程序中,select语句根本不等待。相反,它会立即跳转到文件描述符0是就绪文件描述符的情况

此外,wait_for_key_键入的只是等待用户按下某个键并读取他们所做的操作。这不会等待用户输入。除此之外,我不知道它是如何工作的。不是我写的

如果您知道另一种不用按enter键就可以获取用户输入的方法,那也很好。
谢谢你能给予的任何帮助

要选择的第一个参数不是指针,因此NULL不是合法值。除非你是在Windows上运行,否则两者都不是零。

我解决了这个问题

Windows只允许将select与套接字一起使用,而不像在UNIX系统中那样使用stdin


它不会等待,因为0不像在UNIX中那样是正确的文件描述符

我正在windows上运行。根据windows文档,我发现select在windows中运行时会忽略第一个参数。这就是为什么我把它设为NULLYes,但是windows忽略了它,所以编译器没有意识到它没有意义。我解决了这个问题:windows只允许您使用带套接字的select,而不允许使用stdin。不过,谢谢你的帮助。我真的很感激!这是错误的类型。在某些架构上,可能会导致通过错误的零宽度。不要忽视这个问题。这是真的。这是在windows上运行的。Windows忽略select的第一个参数,这就是我将其设置为NULL的原因。