当前位置:编程学习 > wap >>

新手求大神, 多线程网路编程断开连接时抛异常

服务器端监控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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,