我是靠谱客的博主 俊逸洋葱,最近开发中收集的这篇文章主要介绍QT 多线程 TCP编程 ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects 错误,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
这是另外一个UDP的例子,可以做参考:
入口:
mUDPThread=new UDPThread();//这里参数不要加this,继承至QObject,用于管理自己QUdpSocket的成员变量,QUdpSocket的变量在入口函数以后实例化,不能在此处直接把成员变量也在构造函数直接实例化
mUDPThread->setIPAndPORT(mUDPSendPORT,mUDPReceivePORT,mUDPIPStr);//把端口等信息传入到管理UDP的类内部
QThread* sub = new QThread;
mUDPThread->moveToThread(sub);
sub->start();
connect(this,&Communicator::startUDP,mUDPThread,&UDPThread::working);
emit startUDP();//启动UDP线程
管理UDP的类,继承自QObject
class UDPThread : public QObject
{
Q_OBJECT
public:
QUdpSocket* receiveUDPSocket;//接收的套接字
QHostAddress ip_Udp;
quint16 portSend_Udp;
quint16 portReceive_Udp;
bool ifReceiveFlag;//是否收到过反馈
QByteArray heartBeatMesg;//心跳标志
int invalidHeartCount;//发送的最大无效心跳次数
public:
explicit UDPThread(QObject *parent = nullptr);
~UDPThread();
// 工作函数
void working();//入口函数,成员变量包括receiveUDPSocket,一般在这里面实例化
void setIPAndPORT(quint16 m_sendPort,quint16 m_receivePort,QString m_IPStr);
private:
void InitUDP();
void UDPSendMessage();
bool UDPReceiveMessage();
private:
QTimer *mTimer;//指定时间间隔能指定间隔发送消息
};
入口函数:
void UDPThread::working()
{
//重要就这个
receiveUDPSocket=new QUdpSocket();//套接字实例化,别放到构造函数里面去
if(ip_Udp==QHostAddress("")||portSend_Udp==NULL||portReceive_Udp==NULL){
QLOG_WARN()<<"[UDP]ERRO: the IP ,sendPort,receivePort of UDP maybe = NULL ,please check IPandPort setup";
return;
}
if(receiveUDPSocket->bind(portReceive_Udp,QAbstractSocket::ShareAddress)){
QLOG_TRACE()<<"[UDP] bind to Port success And begin to connecting.....";
}else {
QLOG_WARN()<<"[UDP] UDP bind port fail";
}
connect(receiveUDPSocket,&QUdpSocket::readyRead,this,&UDPThread:: UDPReceiveMessage);
//新增,当在正式连接后,中途出现中断,能以定时器间断发送消息
mTimer =new QTimer(this);
connect(mTimer, &QTimer::timeout, this,&UDPThread::UDPSendMessage);
mTimer->setTimerType(Qt::PreciseTimer);// 修改定时器对象的精度
}
最后
以上就是俊逸洋葱为你收集整理的QT 多线程 TCP编程 ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects 错误的全部内容,希望文章能够帮你解决QT 多线程 TCP编程 ASSERT failure in QCoreApplication::sendEvent: “Cannot send events to objects 错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复