C++ usleep在无限循环内从套接字接收消息的替代方法

C++ usleep在无限循环内从套接字接收消息的替代方法,c++,c,C++,C,在无限while循环中,我不断地检查从套接字接收到的消息,并在循环中使用usleep。但是我想用另一种方法来实现它,而不用在无限循环中使用usleep。如何做???调用线程的执行可以通过调用usleep使其休眠一段时间。 另一种替代方法是定义一个新线程来模拟中断usleep,如等待键盘输入或某种信号。这需要定期进行,因为线程必须恢复以处理响应线程。 但我的建议是,如果有更简单的方法,为什么要把事情复杂化。只是不要叫我们leep。我一直不明白为什么有人会做那样的事。在recv中使用阻塞套接字和阻塞

在无限while循环中,我不断地检查从套接字接收到的消息,并在循环中使用usleep。但是我想用另一种方法来实现它,而不用在无限循环中使用usleep。如何做???

调用线程的执行可以通过调用usleep使其休眠一段时间。 另一种替代方法是定义一个新线程来模拟中断usleep,如等待键盘输入或某种信号。这需要定期进行,因为线程必须恢复以处理响应线程。 但我的建议是,如果有更简单的方法,为什么要把事情复杂化。

只是不要叫我们leep。我一直不明白为什么有人会做那样的事。在recv中使用阻塞套接字和阻塞,或在select或poll中使用非阻塞套接字和阻塞


遵循你能找到的任何健全示例代码的模式,但如果你不知道自己在做什么,就不要编造反模式。

示例:while1{recvfd,buffer,size,NULL;usleep100;}正如@user3386109建议你可以使用select,请参见@AdnanKapasi No,不会的。评论中已经有一个指向示例的链接。@AdnanKapasi为什么?!你所做的一切都毫无意义。例如,如果要等待消息,为什么要指定MSG_DONTWAIT?停止做你不想做的事,做你真正想做的事,而且只做你真正想做的事!我已经试过选择你说的方式了。但这会增加CPU使用率。@AdnanKapasi可能是因为代码中有一个bug。发布一个包含完整代码的新问题。它很容易被误用。我甚至可以猜出你做错了什么——在每次调用select之前,你都忘记重置读取集。如果你不能让它按预期的方式工作,尝试一种不应该工作的方式不是一个好策略。除了select???@AdnanKapasi阻塞套接字操作、轮询和许多特定于平台的方式(如epoll或IOCP)之外,还有其他方式吗。