继上一篇文章
大体实现了一个与UI线程分离的SOCKET封装类
即后台线程负责收发数据包,有数据到来则通知UI线程
UI线程发送数据时通知后台线程(异步)
嗯,大概是这个意思
#pragma once
#include <QTcpSocket>
#include <QByteArray>
#include "XBackgroundWorker.h"
class CXAsyncSocket : public CXBackgroundWorker
{
Q_OBJECT
public:
explicit CXAsyncSocket(void);
virtual ~CXAsyncSocket(void);
private:
QTcpSocket *m_TcpSocket;
private slots:
void Construct_Invokee();
void Destruct_Invokee();
void Connect_Invokee(char *host, quint16 port);
void DisConnect_Invokee();
void Send_Invokee(QByteArray buffer);
public:
static void RegisterMetaTypes();
// 下面三个函数用于前台线程
void Connect(char *host, quint16 port);
void DisConnect();
void Send(QByteArray buffer);
private slots:
// 执行环境为后台线程
void OnReceive();
protected:
// 执行环境为后台线程
virtual void OnReceiveBuffer(QByteArray &buffer) = 0;
signals:
void OnConnect();
void OnDisConnect();
void OnException(QAbstractSocket::SocketError)