QT下的QThread学习(一)
参考文档如下:
http://blog.csdn.net/styyzxjq2009/article/details/8204506
上面这篇文章的开头也也出了另外两篇文章,一并看看,可以看到他的解决思路。在网上搜索QThread使用方法,就会看到QThread不好使用。看了几篇文章,把其中一些以前没有注意到的知识点记录一下。
1、QObject::Connect函数 最后一个参数的设置。http://mobile.51cto.com/symbian-268690.htm 这篇文章有解释。
a、自动连接(Auto Connection) 这是默认设置
如果发送者和接收者处于同一线程,则等同于直接连接
如果发送者和接受者位于不同线程,则等同于队列连接
也就是这说,只存在下面两种情况
b、直接连接(Direct Connection)
当信号发射时,槽函数将直接被调用。Qt::DirectConnection表示一旦信号产生,立即执行槽函数
无论槽函数所属对象在哪个线程,槽函数都在发射者所在线程执行。 注意"槽函数都在发射者所在的线程执行"。
c、队列连接(Queued Connection) Qt::QueuedConnection表示信号产生后,将发送Event给你的receiver所在的线程,postEvent(QEvent::MetaCall,...),
当控制权回到接受者所在线程的事件循环式,槽函数被调用。 注意“槽函数在接收者所在线程执行”。
槽函数在接收者所在线程执行。
d Qt::BlockingQueuedConnection表示信号产生后调用sendEvent(QEvent::MetaCall,...) 在receiver所在的线程处理完成后才会返回;只能当sender,receiver不在同一线程时才可以。
上面的d的意思与应用在与,比如槽是接收一个socket上的数据,那么当有一个数据流到来时,底层发一个信号,这个时候,你在槽函数中去处理这些数据,而处理这些数据比较耗时,比如写入文件,在写文件过程中,又有数据到来,那么这个槽函数又会被调用。这样问题就来了。
这与VC运行机制中的SendMessage与PostMessage消息处理机制一样,SendMessage必须等到消息响应完成才处理向下执行,而PostMessage则是立即返回。
QT下的QThread学习(一)的更多相关文章
- 6、Qt Meta Object system 学习
原文地址:http://blog.csdn.net/ilvu999/article/details/8049908 使用 meta object system 继承自 QOject 类定义中添加 Q_ ...
- Qt Meta Object system 学习
原文地址:http://blog.csdn.net/ilvu999/article/details/8049908 使用 meta object system 继承自 QOject 类定义中添加 Q_ ...
- Qt下libusb-win32的使用(转)
源:Qt下libusb-win32的使用(一)打印设备描述符 主要是在前一篇的基础上,学习libusb-win32的API使用.程序很简单,就是打印指定USB设备的设备描述符(当然其他描述符也是可以的 ...
- Qt下libusb-win32的使用方法(转)
源:Qt下libusb-win32的使用方法 之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下 ...
- Qt下libusb-win32的使用方法
之前一直找不到适合WIN7下的Tiny6410的USB下载软件,正好这几天开始学习USB,所以打算自己写一个专门用于Tiny6410的WIN7下的USB下载软件. 发现了libusb这个库可以用作无驱 ...
- Qt 线程基础(QThread、QtConcurrent等)
[-] 使用线程 何时使用其他技术替代线程 应该使用 Qt 线程的哪种技术 Qt线程基础 QObject与线程 使用互斥量保护数据的完整 使用事件循环防止数据破坏 处理异步执行 昨晚看Qt的Manua ...
- Qt开发者关于QThread的咆哮——你们都用错了
Qt开发者关于QThread的咆哮——你们都用错了 我们(Qt用户)正广泛地使用IRC来进行交流.我在Freenode网站挂出了#qt标签,用于帮助大家解答问题.我经常看到的一个问题(这让我不厌其烦) ...
- Qt Installer Framework的学习(二)
Qt Installer Framework的学习(二) Qt Installer Framework的一些操作能够使用最常见的Qt项目来表示,也就是说,书写pro文件,使用qmake执行之,除了能够 ...
- Qt 线程基础(QThread、QtConcurrent等) 2
使用线程 基本上有种使用线程的场合: 通过利用处理器的多个核使处理速度更快. 为保持GUI线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使用线 ...
随机推荐
- BZOJ 1113 Wall ——计算几何
凸包第一题. 自己认为自己写的是Andrew 其实就是xjb写出来居然过掉了测试. 刚开始把pi定义成了int,调了半天 #include <map> #include <cmath ...
- 常州模拟赛d2t1 小X的质数
题目背景 小 X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的 情感.小 X 认为,质数是一切自然数起源的地方. 题目描述 在小 X 的认知里,质数是除了本身和 1 以外,没有其他因 ...
- bzoj1975: [Sdoi2010]魔法猪学院【k短路&A*算法】
1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 2446 Solved: 770[Submit][Statu ...
- python简易爬虫,帮助理解re模块
20161203更新: 1.使用了BS4解析html 2.使用了mysql-connector插入了数据库表 pip install mysql-connector import urllib.req ...
- 费用流(bzoj 3130)
Description Alice和Bob在图论课程上学习了最大流和最小费用最大流的相关知识. 最大流问题:给定一张有向图表示运输网络,一个源点S和一个汇点T,每条边都有最大流量.一个合法的网络 ...
- angular中的this指向问题
this是指向当前$scope的. 例如在ng-click的使用中,this是指向当前的$scope而并不是dom元素的. 我们可以使用this的一些方法和属性 我们打印一下this就会发现,this ...
- mysqldumpslow不是内部或外部命令,也不是可运行的程序
mysqldumpslow不是内部或外部命令,也不是可运行的程序 window系统,mysql版本:5.7.14. 使用mysqldumpslow命令分析日志时,报错:mysqldumpslow'不是 ...
- CentOS 7.3 源码安装 OpenVAS 9
https://my.oschina.net/u/2613235/blog/1583198
- AC日记——[USACO1.1]坏掉的项链Broken Necklace 洛谷 P1203
题目描述 你有一条由N个红色的,白色的,或蓝色的珠子组成的项链(3<=N<=350),珠子是随意安排的. 这里是 n=29 的二个例子: 第一和第二个珠子在图片中已经被作记号. 图片 A ...
- (5)ASP.NET Core 中的静态文件
1.前言 当我们创建Core项目的时候,Web根目录下会有个wwwroot文件目录,wwwroot文件目录里面默认有HTML.CSS.IMG.JavaScript等文件,而这些文件都是Core提供给客 ...