QSocket默认异步执行

1 篇文章 0 订阅

前言

QSocket产生的消息是异步的,验证


提示:以下是本篇文章正文内容,下面案例可供参考

一、关于同步和异步处理

如果是同步处理的话,就会中断当前任务去处理需要处理的任务。
异步处理,处理完当前任务再去处理需要处理的任务

二、直接通过connect连接方式展示同步与异步的区别

//构造函数 通过队列的方式 异步处理。
connect(this,&Client::signal_test,this,&Client::slot_test,Qt::QueuedConnection);

//在槽中再次触发信号。
void  slot_test()
{
    qDebug()<< "enter function";
    static int tim=10;
    if(tim==0)
    {
        return;
    }
    static int i=10000;
    while(i--);
    qDebug()<< " function  doing";
    tim--;
    emit signal_test();


    qDebug()<< "over this function";
}
结果:

在这里插入图片描述

//构造函数 直接连接的方式 同步处理。
connect(this,&Client::signal_test,this,&Client::slot_test,Qt::DirectConnection);

结果:

在这里插入图片描述

总结

异步是将当前任务做完,在执行队列中的任务。 同步时效性可以得到保证,执行中断操作。

QSocket的信号

//bytesWritten是tcpSocket的信号。
connect(tcpClient,SIGNAL(bytesWritten(qint64)),\
            this,SLOT(updateClientProgress(qint64)),Qt::DirectConnection );
            或者:
            connect(tcpClient,SIGNAL(bytesWritten(qint64)),\
            this,SLOT(updateClientProgress(qint64)),Qt::QueuedConnection);
            
    void       updateClientProgress(qint64 numBytes)
{

    qDebug()<<"enter update";
 //do someThings
     tcpClient->write(xxxx); //触发产生bytesWritten信号
  //do someThings
 
    
    qDebug()<<"enter over";
}

结果都是:
请添加图片描述

总结

bytesWritten的connect的连接方式,不管是同步还是异步 结果都是执行完整的updateClientProgress。说明QTcpSocket产生bytesWritten的信号是异步执行,放在消息队列中。

菜鸟一枚 若有不对 望指正!感谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值