我做了一个服务端,当收到一条连接请求时,就开一个线程专门为这个连接响应。但在线程中得到的QTcpSocket却不会发出readyRead()信号,自然也就进行不了读写了。
但如果是用单线程的话,就没有这样的问题,哪位大侠有这样的经验的? 教一下吧。
代码
void OrderSocket::incomingConnection(int handle)
{
//当只用1的代码就一切正常
//111111111111111111111111111111111111
TcpSocket * tmpSocket = new TcpSocket(handle,this);
connect(tmpSocket, SIGNAL(receivedMsg(QString)), this, SLOT(readMsg(QString)));
//111111111111111111111111111111111111
//当只用2的代码时就不能发出readyRead()信号
//222222222222222222222222222222222222222
//当有新的连接到来的时候,新开一个线程进行处理
MultiReceived * mr = new MultiReceived(handle, 0);
connect(mr, SIGNAL(receivedMsgFromThread(QString)), this, SLOT(readMsg(QString)));
connect(mr, SIGNAL(finished()), mr, SLOT(deleteLater()));
mr->start();
//2222222222222222222222222222222222222222
}
TcpSocket 里面是这样写的,cld是incomingConnection里面得到的
{
bool d = setSocketDescriptor(cId);
//当有信息可读时,则调用readMsg槽进行信息的读取
connect(this, SIGNAL(readyRead()), this, SLOT(readMsg()));
//当连接被断开时,则调用deleteLater()槽进行socket对象的删除
connect(this, SIGNAL(disconnected()), this, SLOT(deleteLater()));
}