QTcpsocket 写服务器程序时,需要定时向客户端发送监控数据,同时需要响应客户端请求。
问题是: QTcpSocket 只能在同一个线程中使用,定时器会在主线程中运行
解决方案:在定时器中发送信号给封装的客户端数据处理socket,并在线程中将该信号与socket中的操作相连接。
//clientsocket.h
#ifndef CLIENTSOCKET_H
#define CLIENTSOCKET_H
#include <QTcpSocket>
#include <QTimer>
class ClientSocket : public QTcpSocket
{
Q_OBJECT
public:
ClientSocket(QObject *parent);
~ClientSocket();
signals:
void sigReadData(const QString &data);
public slots:
void slotTimeOut();
void slotReadyRead();
void slotWriteData(const QString& data);
private:
QTimer* _timer;
};
#endif // CLIENTSOCKET_H
// clientSocket.cpp
#include "clientsocket.h"
#include <QDebug>
ClientSocket::ClientSocket(QObject *parent)
: QTcpSocket(parent)
{
connect(this, &QAbstractSocket::ready