前言
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的信号是异步执行,放在消息队列中。
菜鸟一枚 若有不对 望指正!感谢