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线程或其他高实时性线程的响应,将耗时的操作或阻塞的调用移到其他线程. 何时使用其他技术替代线程 开发人员使用线 ...
随机推荐
- 对拍程序(Win)
代码如下: @echo off :again rand.exe echo "rand finish" asd.exe echo "1.exe finish" 未 ...
- 【Luogu】P1868饥饿的奶牛(DP)
题目链接 话说我存一些只需要按照一个关键字排序的双元素结构体的时候老是喜欢使用链式前向星…… DP.f[i]表示前i个位置奶牛最多能吃到的草.转移方程如下: f[i]=f[i-]; f[i]=max( ...
- 算法复习——凸包加旋转卡壳(poj2187)
题目: Description Bessie, Farmer John's prize cow, has just won first place in a bovine beauty contest ...
- zoj 3812 We Need Medicine (dp 状压)
先贴一下转载的思路和代码,,,:http://blog.csdn.net/qian99/article/details/39138329 状压dp博大精深啊,以后看到n<=50都可以往状压上想, ...
- ZOJ 3306 状压dp
转自:http://blog.csdn.net/a497406594/article/details/38442893 Kill the Monsters Time Limit: 7 Seconds ...
- Mysql 使用存储过程添加新字段
-- 1, 注意SQL 语句开始处不要空格 -- 2, 在使用 [--] 进行注释时,后面请加空格 USE `test`; -- lastUpdateTime drop procedure if ex ...
- 使用selenium抓取淘宝的商品信息
淘宝的页面大量使用了js加载数据,所以采用selenium来进行爬取更为简单,selenum作为一个测试工具,主要配合无窗口浏览器phantomjs来使用. import re from seleni ...
- mysql续
接上篇博客,写完以后看了看,还是觉的写的太简单,就算是自己复习都不够,所以再补充一些 1.创建多表关联 需求:图书管理系统,创建几张表,包含书籍,出版社,作者,作者详细信息等内容 分析: (1)图书只 ...
- Container With Most Water 双指针法
Given n non-negative integers a1, a2, ..., an, where each represents a point at coordinate (i, ai). ...
- Execption异常 手动和自动抛除异常
package cn.zmh.Exception; /* * * try{ * 需要被检测的语句 * } * catch(异常类 变量){ * 异常的处理语句 * } * finally{ * 一定会 ...