新手求大神, 多线程网路编程断开连接时抛异常
服务器端监控Socket每收到一个连接,即创建一新的线程,负责数据的收发。通常情况下可以正确执行,但是每当客户端出现异常时,socket连接被异常中断,服务器端无法收到error信号,并且弹出异常,说创建和接收对象不在同一个线程。另外,如果主动调用waitForDisconnect() 也会报此错误
错误提示:
Module:4.8.2
File: global/qglobal.cpp
Line: 2240
ASSERT failure in QCoreApplication: sentEvent: "Cannot send events to objects owned by a different thread" file kernel\qcoreapplication.cpp line 501
代码如下:
监控服务器:
void MonitorServer::incomingConnection(int socketDescriptor)
{
PDVConnection* pConnection = new PDVConnection(this, socketDescriptor);
connect(pConnection, SIGNAL(finished()), pConnection, SLOT(deleterLater()));
}
连接线程:
void PDVConnection::run()
{
m_pConSocket = new QTcpSocket();
m_pConSocket->setSocketDescriptor(m_socketDescriptor);
connect(m_pConSocket, SIGNAL(readRead()), this, SLOT(OnReceiverData()));
connect(m_pConSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(OnSocketError(QAbstractSocket::SocketError)));
connect(m_pConSocket, SIGNAL(disconnected()), this, SLOT(OnSocketClosed()));
exec();
}
--------------------编程问答-------------------- 做成多线程的多有出错,先做单线程的看看,如果不满足再尝试多线程。 --------------------编程问答-------------------- m_pConSocket = new QTcpSocket();
m_pConSocket->setSocketDescriptor(m_socketDescriptor);
connect(m_pConSocket, SIGNAL(readRead()), this, SLOT(OnReceiverData()));
connect(m_pConSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(OnSocketError(QAbstractSocket::SocketError)));
connect(m_pConSocket, SIGNAL(disconnected()), this, SLOT(OnSocketClosed()));
你自己看,你将this改为m_pConSocket。
补充:移动开发 , Qt