• 4097阅读
  • 0回复

Qt网络多线程中,readyRead无法多次触发 [复制链接]

上一主题 下一主题
离线king_gang
 

只看楼主 倒序阅读 楼主  发表于: 2013-01-06

现在需要在主机端(windows)连接多个客户端(linux),子类了一个QObect如下:
class HandlerClients : public QObject {
  Q_OBJECT
public:
  HandlerClients::HandlerClients(int sockDescriptor)
    : QObject()
  {
    m_sockDescriptor = sockDescriptor;
  
    m_socket  = new QTcpSocket(this);
    m_socket->setSocketDescriptor(m_sockDescriptor);
  
    connect(m_socket, SIGNAL(readyRead()), this, SLOT(clientReadyRead()));
    connect(m_socket, SIGNAL(disconnected()), this, SLOT(clientDisconnected()));
  }
}
class HandlerClients::clientReadyRead()
{
/*reveive bytes from clients*/
}
然后每次有新的客户端连接时就会在子类的QServer的incomingConnection中new 一个新的client,并丢到新的线程中,大体代码如下:
void NetServer::incomingConnection(int sockDesp)
{
    QThread *thread = new QThread();
    HandlerClients *client = new HandlerClients(sockDescriptor);
    connect(thread, SIGNAL(finished()), client, SLOT(deleteLater()));
    client->moveToThread(thread);
    thread->start();
}
现在碰到的问题是,当某个客户端发第一个包时,readyRead可以被正常触发并接收数据;但是发第二个包时,readyRead没有被触发,但是客户端显示数据已经发送出去了。本人对Qt的多线程应用比较菜,请问各位问题可能出在哪?
快速回复
限100 字节
 
上一个 下一个