子线程下的TCPSocket

这篇博客讲述了在QT C++环境中,如何在子线程中正确使用TCPSocket,包括遇到的错误如QSocketNotifier的线程限制问题和对象跨线程创建的问题。解决方案是在子线程的run方法内创建TCP连接,并在子线程销毁时断开连接,同时使用停止标志来控制while循环。
摘要由CSDN通过智能技术生成

1.头文件

class CameraTcp : public QThread
{
	Q_OBJECT
public:
	explicit CameraTcp(QObject *parent = nullptr);
	void startTcp(const QString&ip,int port);
	void stopTcp();
	void onSendMsg(QByteArray dataArray);

protected:
	void run() override;
protected slots:
	void onConnect();
	void onDisConnect();
	void onReadMsg();
private:
	QTcpSocket * m_cameraTcp = nullptr;
	bool        m_isThreaStopped;
	bool 		m_isOkConect;
	int			m_iSendData;
	int 		m_nSockPort;//端口
    QString 	m_QStrSocketIp;//ip
};

2.cpp

CameraTcp::CameraTcp(QObject *parent) :QThread(parent) {
	m_isThreaStopped = false;
	m_isOkConect = false;
}
void CameraTcp::run() {
	//要将mythread线程里的对象或指针创建,需要在run()函数里,创建或分配对象空间,否则出现跨线程使用
	m_cameraTcp = new QTcpSocket();//法2:将这句及后面的,放在run中
	//connect(m_cameraTcp, SIGNAL(readyRead()), this, SLOT(onReadMsg()), Qt::DirectConnection);//让接受函数在run子线程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值