[英]How terminate thread reading from socket c++?
在c ++中,“ recvfrom”函数是一个阻止函数(阻止线程直到数据包到达)。
我如何安全地终止“ recvfrom”中阻塞的线程?
通过仅在成功返回select / poll / epoll后才调用recvfrom
避免这种情况。
就像评论中提到的@Remy Lebeau一样,您可以上拉以下内容:
while(run_flag) {
if(check select/poll/epoll) {
recvfrom(..)
}
}
您可以开始使用epoll并在此处选择 。 互联网上也有很多。
另一种方法是使用异步网络操作而不是线程。
我可能还会建议使用boost :: asio,因为这只会简化您的所有网络工作。
使用“自管”技巧。
使用pipe(2)系统调用打开管道。 使用select / poll / kqueue /从您关心的套接字和管道中读取的任何内容循环坐下。 从套接字获取数据时,请像往常一样处理它。
要停止线程,请关闭要停止处理的线程中管道的另一端。 您将在管道上将其检测为EOF,然后将其用作停止线程处理实际套接字的信号。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.