博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt多线程信号槽传输方式
阅读量:5788 次
发布时间:2019-06-18

本文共 1150 字,大约阅读时间需要 3 分钟。

//简单介绍一下QT信号与槽的连接方式:    

//Qt::AutoConnection表示自动选择相应的连接方式,如果信号与槽在同一线程,就采用Qt::DirectConnection, 
//如果信号与槽不在同一线程,将采用Qt::QueuedConnection的连接方式。    
 //Qt::DirectConnection表示一旦信号产生,立即执行槽函数。    
 //Qt::QueuedConnection表示信号产生后,将发送Event给你的receiver所在的线程,postEvent(QEvent::MetaCall,...), 
//slot函数会在receiver所在的线程的event loop中进行处理。    
 //Qt::BlockingQueuedConnection表示信号产生后调用sendEvent(QEvent::MetaCall,...), 
//在receiver所在的线程处理完成后才会返回;只能当sender,receiver不在同一线程时才可以。    
 //Qt::UniqueConnection表示只有它不是一个重复连接,连接才会成功。如果之前已经有了一个链接(相同的信号连接到同一对象的同一个槽上),那么连接将会失败并将返回false。    
 //Qt::AutoCompatConnection与QT3保持兼容性    
 //说明一下,对于任何的QThread来说,其线程只存在于run()函数内,其它的函数都不在线程内,所以此处要采用Qt::BlockingQueuedConnection,    
 //因为当SOCKET有数据到达时就会发出readyRead()信号,但是此时可能之前的receiveFile()还未执行完毕,之前使用的Qt::AutoConnection,    
 //结果传输大文件的时候就会出错,原因就在于只要有数据到达的时候,就会连接信号,但是数据接收还没处理完毕,而Qt::BlockingQueuedConnection会阻塞    
 //此连接,直到receiveFile()处理完毕并返回后才发送信号。 
qDebug()<<"run thread:"<<QThread::currentThreadId();  
    //connect(tcpSocket,SIGNAL(readyRead()),this,SIGNAL(receiveSgl(tcpSocket))); 
//  connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(receiveFile()),Qt::BlockingQueuedConnection); 
    exec(); 

转载于:https://www.cnblogs.com/tiandsp/p/7580586.html

你可能感兴趣的文章
关于EXPORT_SYMBOL的作用浅析
查看>>
成功的背后!(给所有IT人)
查看>>
在SpringMVC利用MockMvc进行单元测试
查看>>
Nagios监控生产环境redis群集服务战
查看>>
Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件
查看>>
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>
Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
查看>>
Python version 2.7 required, which was not foun...
查看>>
context:annotation-config vs component-scan
查看>>
exgcd、二元一次不定方程学习笔记
查看>>
经典sql
查看>>
CSS3边框会动的信封
查看>>
JavaWeb实例设计思路(订单管理系统)
查看>>
source insight中的快捷键总结
查看>>
PC-IIS因为端口问题报错的解决方法
查看>>
java四种线程池简介,使用
查看>>
ios View之间的切换 屏幕旋转
查看>>