当前位置: 代码迷 >> QT开发 >> qt线程的有关问题~
  详细解决方案

qt线程的有关问题~

热度:92   发布时间:2016-04-25 03:31:47.0
qt线程的问题~~
请问高手,QTcpSocket如何在一个线程(QThread)中ReadData?

------解决方案--------------------
CSocketApp::CSocketApp()
{
    pServer = new QLocalServer(this);
    connect(pServer, SIGNAL(newConnection()), this, SLOT(rxNewConnection()));
    pServer->listen(DATA_PROCESS_NAME);
}


void CSocketApp::rxNewConnection()
{
    pSocket = pServer->nextPendingConnection();
    if (pSocket != NULL)
    {
        connect(pSocket, SIGNAL(readyRead()), this, SLOT(rxMessage()));
        pSocket->waitForReadyRead(1000);
        connect(pSocket, SIGNAL(disconnected()), pSocket, SLOT(deleteLater()));
    }
}
------解决方案--------------------
void rxMessage()

是你定义的一个槽函数,接收socket发来的消息


pSocket->read()
------解决方案--------------------
朋友是这样的,才发送读数据通知,而数据是放在缓冲区中,这个读肯定是在us到ms级完成,我想影响到你数据刷新的可能是你对你的数据做了耗时的处理,为了不影响你界面刷新,你最好先把读出来的数据放到缓冲,通过QThread开启一个线程来处理该数据,注意该线程的优先级必须设置最低。

class CMyThread : public QThread
{
    public:
          static CMyThread *getInstance()
          {
               return &mSelf;
          }
          void run()
          {
               while(1)
               {
                   //处理缓冲数据,注意同步
               }
          }
private:
    static CMyThread mSelf;
}
CMyThread CMyThread::mSelf;


//启动
CMyThread *pThread = CMyThread::getInstance();
pThread->start(minlowest);//这里是最低优先级宏,具体我记不清了,你查查手册,就知道了
  相关解决方案