当前位置: 技术问答>linux和unix
boost中的同步accepotr和read在linux平台下退不出来,十万火急
来源: 互联网 发布时间:2017-05-24
本文导语: 我在公司在linux系统下要用到boost的asio中的Tcp同步编程,我在子线程中用tcp::acceptor等待着接受客户端的连接,然后不用客户端连接,直接启动服务端然后退出,但是在退出的时候那个子线程一直在m_acceptor.accept(m_socket)...
我在公司在linux系统下要用到boost的asio中的Tcp同步编程,我在子线程中用tcp::acceptor等待着接受客户端的连接,然后不用客户端连接,直接启动服务端然后退出,但是在退出的时候那个子线程一直在m_acceptor.accept(m_socket);这儿堵着,始终退不出来。但是在windows系统下不会堵,请教一下该怎么退出,急急……,下面是我的操作方法:
子线程:
m_acceptor.open(m_localEndPoint.protocol());
m_acceptor.bind(m_localEndPoint);
m_acceptor.listen(boost::asio::socket_base::max_connections);
m_acceptor.accept(m_socket);//在linux系统下,一直堵在这儿
主线程中的结束:
m_socket.close();
m_io_service.stop();
m_acceptor.close();
m_threadGroup.join_all(); //因为子线程退不出来,一直在这儿等着.
请教一下该如何正常退出,但是不能强杀子线程.还有read数据的时候也是没有反应不能退出,
//下面是我的全部代码
//makefile文件是:
/*
g++ -g -m64 -c -o tcp_server_pra1.o tcp_server_pra1.cpp -I/usr/local/include/ -L/usr/local/lib
g++ -g -m64 -o tcp_server_pra tcp_server_pra1.o -I/usr/local/include/ -L/usr/local/lib -lboost_system -lboost_thread
*/
//
#include
#include
#include
#include
using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
//TCP server
class CTcpServer
{
public:
CTcpServer(boost::asio::io_service& is)
:m_bExit(false),
m_io_service(is),
m_socket(is),
m_localEndPoint(tcp::v4(), 9005),
m_acceptor(is)
{
}
//start accept client connect thread
void Start()
{
m_bExit = false;
std::cout
子线程:
m_acceptor.open(m_localEndPoint.protocol());
m_acceptor.bind(m_localEndPoint);
m_acceptor.listen(boost::asio::socket_base::max_connections);
m_acceptor.accept(m_socket);//在linux系统下,一直堵在这儿
主线程中的结束:
m_socket.close();
m_io_service.stop();
m_acceptor.close();
m_threadGroup.join_all(); //因为子线程退不出来,一直在这儿等着.
请教一下该如何正常退出,但是不能强杀子线程.还有read数据的时候也是没有反应不能退出,
//下面是我的全部代码
//makefile文件是:
/*
g++ -g -m64 -c -o tcp_server_pra1.o tcp_server_pra1.cpp -I/usr/local/include/ -L/usr/local/lib
g++ -g -m64 -o tcp_server_pra tcp_server_pra1.o -I/usr/local/include/ -L/usr/local/lib -lboost_system -lboost_thread
*/
//
#include
#include
#include
#include
using namespace boost;
using namespace boost::asio;
using namespace boost::asio::ip;
//TCP server
class CTcpServer
{
public:
CTcpServer(boost::asio::io_service& is)
:m_bExit(false),
m_io_service(is),
m_socket(is),
m_localEndPoint(tcp::v4(), 9005),
m_acceptor(is)
{
}
//start accept client connect thread
void Start()
{
m_bExit = false;
std::cout
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
站内导航:
特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!