• 8673阅读
  • 8回复

[提问]Qt多线程启动QTcpServer [复制链接]

上一主题 下一主题
离线ccxx
 
只看楼主 倒序阅读 楼主  发表于: 2012-07-23
void ServerThread::run()
{    
      Server* server=new Server;    
      server->listen(QHostAddress::Any,9999);
}
这段代码里Server是继承QTcpServer的,如果我用start的话Client收不到信息,如果我用run的话Client收得到信息,原因在哪呢?用start的话怎么办呢?
虽然说listen默认在另外的线程开启(我在windows的资源管理器上测过了,调用listen的同时线程数变成2),但是如果主线程任务繁重,比如不断输出的话,Client会一直等待,直到主线程输出任务结束才有响应,这又是为什么呢?
离线XChinux

只看该作者 1楼 发表于: 2012-07-23
run()函数的最后加个exec();以进入消息循环。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ccxx
只看该作者 2楼 发表于: 2012-07-25
回 1楼(XChinux) 的帖子
太感谢你了,问题解决了。原来要进入事件循环才开始监听
离线XChinux

只看该作者 3楼 发表于: 2012-07-25
你那个Server没有指定parent?也不手动delete?
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线ccxx
只看该作者 4楼 发表于: 2012-07-25
回 3楼(XChinux) 的帖子
差点忘了,谢谢提醒啊
离线ogred3d
只看该作者 5楼 发表于: 2012-07-25
崇拜一下版主大人
Qt
离线charles_gz

只看该作者 6楼 发表于: 2012-09-27
我这出现的问题是在run函数中不能接收客户端的信息但是可以发送信息给客户端。
要怎么改呢?
void Threadclient::run(){    QTcpSocket socket;    qDebug()<<"socketDescriptor =="<<socketDescriptor;    if(!socket.setSocketDescriptor(socketDescriptor))    {        emit error(socket.error());        return;    }    //接收数据    QDataStream in (&socket);    in.setVersion(QDataStream::Qt_4_7);    if(blocksize==0)    {        if(socket.waitForReadyRead(10000*10))        {            qDebug()<<"clientsocket.bytesAvailable=="<<socket.bytesAvailable();            if(socket.bytesAvailable()<(int)sizeof(quint16))            {                socket.close();                return;            }            in >>blocksize;            qDebug()<<"blocksize=="<<blocksize;            if(socket.bytesAvailable()<blocksize)            {                socket.close();                return;            }            QString type;            QString message;            in >>type;            qDebug()<<"type=="<<type;            if(type=="0x61")            {                //获取时间命令                in >>message;                qDebug()<<"message=="<<message;            }        }    }    exec();}
离线yxkaibaoma

只看该作者 7楼 发表于: 2013-02-28
我的也收不到客户端消息,同问 需怎么改啊
离线yxkaibaoma

只看该作者 8楼 发表于: 2013-02-28
我的解决了
6楼  把接受客户端信息,写成槽函数。。。
connect(socket,SIGNAL(readyRead()),this,SLOT(readMessage()),Qt::BlockingQueuedConnection);

同样在最后也加上exec();
快速回复
限100 字节
 
上一个 下一个