我知道这不是用来解答我的问题的最佳方式。在我的服务器中,一些问题基本上归结为此 - 一旦满足conditionA,你如何从while循环中断开?如果满足条件B,是否可以销毁特定的线程?如何从活动线程中断开while循环
不幸的是,主线程永远被recvfrom()函数阻塞,除非我可以从循环中断开。
while (1)
{
recBytes = recvfrom(sock, packetBuff, 8, 0, (struct sockaddr *) &client, &SockLength);
std::thread TX([&]
{
//process packet task
if(conditionA == 1)
break from while loop
if(conditionB == 1)
destroy any active threads spawned by TX
.
.
.
much more tasks
});
TX.detach();
}
.
.
.
continue rest of code
在此先感谢!
你有没有考虑过使用一些asio库?想到boost.asio,但也有其他库可用。尽管如上所述,从另一个线程关闭套接字是简单而有效的,可以从recv_from退出,并检查错误情况,因为我希望你已经做到了。 break语句将退出循环。 –
我可以在YT上建议这个讲座:“时间史:异步C++ - 史蒂文辛普森”吗?在使用现代C++技术设计客户端/服务器应用程序之前,这非常值得。无论您的应用需要多大尺寸。 –
@MichaëlRoy你介意在代码中展示这看起来像什么吗? – djent