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);//这里是最低优先级宏,具体我记不清了,你查查手册,就知道了