Qt move to thread 移动到新线程注意事项

本文介绍了一种使用Qt框架实现UDP多线程通信的方法。通过将UDP接收类及其内部的socket指针移动到单独的线程中,解决了主线程与新线程间的数据接收问题。若不正确移动socket指针,则会导致数据接收不完整的情况。

使用move to thread接口将某个类移动到新线程时,该类中如果有指针成员变量的话,也要把指针成员变量一起移动到新线程内,不然指针的成员变量还在主线程,特别的tcp、tdp等比较耗时的对象。

先移动类的对象,再移动类的指针成员变量。

类指针的初始化在移动到新线程前做就可以。

自己写了一个测试udp发送接收的类。用socket助手向发送数据,用自己的程序接收。来测试udp在多线程下的表现。

	this->init();
	this->moveToThread(&m_thread);
	this->m_receiveSocket->moveToThread(&m_thread);
	m_thread.start();

这段代码在一个类的构造函数里面,类中函数udp的socekt指针。

如果不把m_receiveSocket也移动到新线程。就会出现下面的错误:
udp跨线程错误
并且udp只能收到一次数据,其余的全部就收不到了。

移动到新线程后,就是这样的结果。
在这里插入图片描述
数据接收正常。下面贴上完整源码。

udpReceiveTest .h:

#pragma once

#include <QObject>
#include <qudpsocket.h>
#include <qthread.h>

class udpReceiveTest : public QObject
{
   
   
	Q_OBJECT
public:
	QThread m_thread;

public
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值