我是靠谱客的博主 俊逸洋葱,最近开发中收集的这篇文章主要介绍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 错误所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(30)

评论列表共有 0 条评论

立即
投稿
返回
顶部