Qt下几个线程函数介绍

2012-11-09  来源:本站原创  分类:Qt  人气:6 

1、QCoreApplication::processEvents()

2、每个线程可以有它的事件循环,初始线程开始它的事件循环需使用QCoreApplication::exec(),别的线程开始它的事件循环需要用QThread::exec().像QCoreApplication一样,QThreadr提供了exit(int)函数,一个quit() slot。

线程安全的函数QCoreApplication::postEvent(),在任何时候,给任何线程中的任何对象投递一个事件,事件会在那个创建了对象的线程中通过事件循环派发。

QThread:exec() 来启动线程的事件循环 循环执行当前线程

3、a.exe运行时库的查找顺序是:当前路径 -> 系统路径(通常是 system32)

4、Qt 线程类
Qt 包含下面一些线程相关的类:
QThread 提供了开始一个新线程的方法
QThreadStorage 提供逐线程数据存储
QMutex 提供相互排斥的锁,或互斥量
QMutexLocker 是一个便利类,它可以自动对QMutex加锁与解锁
QReadWriterLock 提供了一个可以同时读操作的锁
QReadLocker与QWriteLocker 是便利类,它自动对QReadWriteLock加锁与解锁
QSemaphore 提供了一个整型信号量,是互斥量的泛化
QWaitCondition 提供了一种方法,使得线程可以在被另外线程唤醒之前一直休眠。
Qt 高级线程类
QtConcurrent 开启线程事务
QFutureWatcher 观测线程状态
QFuture 线程启动类

QtConcurrent 创建线程的方法比较多, 而且QtConcurrent 本身比较特殊,若系统有空闲线程时,它会调度空闲线程,无空闲线程时将会创建一个线程。(注意:QtConcurrent 创建线程归QthreadPool管理,若超过最大线程数,将会进入队列等待),QtConcurrent创建线程的方法多种

Qt 线程同步

QMutex, QReadWriteLock, QSemaphore, QWaitCondition 提供了线程同步的手段。使用线程的主要想法是希望它们可以尽可能并发执行,而一些关键点上线程之间需要停止或等待。例如,假如两个线程试图同时访问同一个 全局变量,结果可能不如所愿。

QMutex

QMutex 提供相互排斥的锁,或互斥量。在一个时刻至多一个线程拥有mutex,假如一个线程试图访问已经被锁定的mutex,那么它将休眠,直到拥有mutex的线程对此mutex解锁。Mutexes常用来保护共享数据访问。

QReadWriterLock

QReadWriterLock 与QMutex相似,除了它对 “read”,”write”访问进行区别对待。它使得多个读者可以共时访问数据。使用QReadWriteLock而不是QMutex,可以使得多线程程序更具有并发性。

QSemaphore

QSemaphore 是QMutex的一般化,它可以保护一定数量的相同资源,与此相对,一个mutex只保护一个资源。下面例子中,使用QSemaphore来控制对环状缓 冲的访问,此缓冲区被生产者线程和消费者线程共享。生产者不断向缓冲写入数据直到缓冲末端,再从头开始。消费者从缓冲不断读取数据。信号量比互斥量有更好 的并发性,假如我们用互斥量来控制对缓冲的访问,那么生产者,消费者不能同时访问缓冲。然而,我们知道在同一时刻,不同线程访问缓冲的不同部分并没有什么 危害。

Qt下几个线程函数介绍

5、在Qt中要创建线程,第一步是继承QThread类,第二步是实现其中的run()函数,由start()函数来调用

相关文章
  • Qt下几个线程函数介绍 2012-11-09

    1.QCoreApplication::processEvents() 2.每个线程可以有它的事件循环,初始线程开始它的事件循环需使用QCoreApplication::exec(),别的线程开始它的事件循环需要用QThread::exec().像QCoreApplication一样,QThreadr提供了exit(int)函数,一个quit() slot. 线程安全的函数QCoreApplication::postEvent(),在任何时候,给任何线程中的任何对象投递一个事件,事件会在那个创建

  • PHP实现数字补零功能的2个函数介绍 2013-10-01

    这篇文章主要介绍了PHP实现数字补零功能的2个函数介绍,需要的朋友可以参考下 在PHP中至少有两个函数能够帮助我们快速实现数字补零: 首先是PHP str_pad函数: #str_pad - 使用另一个字符串填充字符串为指定长度 顾名思义这个函数是针对字符串,对指定的字符串填补任何其它的字符串 str_pad参数说明: 复制代码 代码如下: string str_pad ( string $input , int $pad_length [, string $pad_string = " &qu

  • Python isinstance函数介绍 2013-10-10

    这篇文章主要介绍了Python isinstance函数介绍,本文用实例讲解了判断变量是否是某个指定类型,需要的朋友可以参考下 isinstance(object, classinfo) 判断实例是否是这个类或者object object是变量 classinfo 是类型(tuple,dict,int,float) 判断变量是否是这个类型 class objA: pass A = objA() B = 'a','v' C = 'a string' print isinstance(A, objA

  • Lua字符串库中的几个重点函数介绍 2013-11-22

    这篇文章主要介绍了Lua字符串库中的几个重点函数介绍,本文讲解了几个最常用的强大的字符串函数find.match.gsub.gmatch,需要的朋友可以参考下 在<Lua中的一些库>中也说到了,要对string库的模式匹配进行单独的讲解.对于字符串的处理,对于任何语言的学习来说,都是一个难点,而且也是一个必会的知识点.给你一个字符串,让你按照某种需求进行处理,你不会,那是多么尴尬的一件事情.所以,看完<Lua中的一些库>和这篇文章之后,我争取做到让你在处理字符串时,不再感到捉襟见肘

  • php创建和删除目录函数介绍和递归删除目录函数分享 2013-12-03

    这篇文章主要介绍了php创建和删除目录函数介绍和递归删除目录函数分享,本文重点是对递归删除目录的自定义函数分享,需要的朋友可以参考下 mkdir() - 新建目录 ? 语法:bool mkdir (string pathname [,int mode]) ? 尝试新建一个由 pathname 指定的目录. rmdir() - 删除目录 复制代码 代码如下: ? 语法:bool rmdir ( string dirname ) ? 尝试删除 dirname 所指定的目录. 该目录必须是空的,而且要

  • JavaScript中的console.dir()函数介绍 2014-02-07

    这篇文章主要介绍了JavaScript中的console.dir()函数介绍,console.dir主要用来dump某些对象的详细信息,需要的朋友可以参考下 在调试JavaScript程序时,有时需要dump某些对象的详细信息.通过手工编写JavaScript代码可以完成这一工作:针对对象的属性进行循环,将循环到的每一个属性值打印出来:可见,这一过程是比较繁琐的.在具备调试工具的浏览器上,这一工作可以通过console.dir()语句来方便的完成. console.dir()的使用 consol

  • C#中的高阶函数介绍 2014-02-14

    这篇文章主要介绍了C#中的高阶函数介绍,本文讲解了接受函数.输出函数.Currying(科里化)等内容,需要的朋友可以参考下 介绍 我们都知道函数是程序中的基本模块,代码段.那高阶函数呢?听起来很好理解吧,就是函数的高阶(级)版本.它怎么高阶了呢?我们来看下它的基本定义: 1:函数自身接受一个或多个函数作为输入 2:函数自身能输出一个函数. //函数生产函数 满足其中一个就可以称为高阶函数.高阶函数在函数式编程中大量应用.c#在3.0推出Lambda表达式后,也开始慢慢使用了. 目录1:接受函数

  • JavaScript中的console.assert()函数介绍 2014-03-10

    这篇文章主要介绍了JavaScript中的console.assert()函数介绍,assert()函数是一个调试中经常使用的断言工具函数,需要的朋友可以参考下 在JavaScript程序的开发和维护过程中,Assert(断言)是一个很好的用于保证程序正确性的特性.在具备调试工具的浏览器上,这一特性可以通过调用console.assert()来实现.比如在以下代码中,console.assert()语句保证cat对象的score变量值长度为3: function cat(name, age, s

  • Swift中的可变参数函数介绍 2014-04-04

    这篇文章主要介绍了Swift中的可变参数函数介绍,本文实现了和Objective-C调用方法一样的变参数函数,需要的朋友可以参考下 可变参数函数指的是可以接受任意多个参数的函数,我们最熟悉的可能就是 NSString 的 -stringWithFormat:方法了.在 Objective-C 中,我们使用这个方法生成字符串的写法是这样的: NSString *name = @"Tom"; NSDate *date = [NSDate date]; NSString *string =

  • Swift的74个常用内置函数介绍 2014-04-07

    这篇文章主要介绍了Swift的74个常用内置函数介绍,这篇文章列举出了所有的Swift库函数,内置函数是指无需引入任何模块即可以直接使用的函数,需要的朋友可以参考下 Swift包含了74个内置函数,但在 The Swift Programming Langage 一书中只介绍了其中的7个,其它的都没有在文档中体现. 这篇文章列举出了所有的Swift库函数.文中所谓的 内置函数 是指无需引入任何模块(比如说Fundation等)即可以直接使用的函数. 下面先来看看7个在文档中提到的库函数: 下面列

  • python基础教程之自定义函数介绍 2014-05-03

    这篇文章主要介绍了python基础教程之自定义函数介绍,本文讲解了python中函数的定义方法.函数参数的定义方法,需要的朋友可以参考下 函数最重要的目的是方便我们重复使用相同的一段程序. 将一些操作隶属于一个函数,以后你想实现相同的操作的时候,只用调用函数名就可以,而不需要重复敲所有的语句. 函数的定义 首先,我们要定义一个函数, 以说明这个函数的功能. def square_sum(a,b): c = a**2 + b**2 return c 这个函数的功能是求两个数的平方和. 首先,def

  • JavaScript截取字符串的2个函数介绍 2014-06-18

    这篇文章主要介绍了JavaScript截取字符串的2个函数介绍,它们分别是substring和substr函数,本文用实例讲解了它们的用法,需要的朋友可以参考下 首先我们来看一下substring函数使用介绍. 一.substring substring需要至少需要一个参数,第一个参数为起始位置,第二个参数可选,为结束位置. 只有一个参数: <meta charset="UTF-8" /> <script type='text/javascript'> /**

  • PHP mb_convert_encoding文字编码的转换函数介绍 2014-07-12

    PHP mb_convert_encoding文字编码的转换函数介绍,可以将字符转换为gbk或utf8格式. 文字编码的转换mb_convert_encoding() mb_convert_encoding( $str, $encoding1,$encoding2 ) $str,要转换编码的字符串 $encoding1,目标编码,如utf-8,gbk,大小写均可 $encoding2,原编码,如utf-8,gbk,大小写均可 实例1 <?php $str='脚本之家:http://www.jb5

  • Python构造函数及解构函数介绍 2014-08-07

    这篇文章主要介绍了Python构造函数及解构函数介绍,本文只是讲解构造及解构函数的简单知识,需要的朋友可以参考下 python 有一个相应的特殊解构器(destructor)方法名为__del__().然而,由于python具有垃圾对象回收机制(靠引用计数),这个函数要直到该实例对象所有的引用都被清除掉后才会被执行.python中的解构器是在实例释放前提供特殊处理功能方法,它们通常没有被实现,因为实例很少被显式释放. 在下面的例子中,我们分别创建(并覆盖) __init__()和__del__(

  • PHP中的正则表达式函数介绍 2014-08-14

    PHP中的正则表达式函数介绍,需要的朋友可以参考下 正则表达式(Regular Expression) 正则表达式系统: 1.POSIX 2.Perl PHP中使用的regex是PCRE: NOTE:PCRE(Perl兼容正则表达式,Perl Compatible Regular Expressions) PCRE语法: 1.定界符 必须成对出现,可以使用除0-9a-zA-Z\以外的任何字符 2.原子 1.正则需要匹配的可见和不可见字符都是原子 2.一个正则表达式最少含有一个原子 3.当需要匹配

  • C++ const修饰变量和修饰函数介绍 2014-11-28

    这篇文章主要介绍了C++ const修饰变量和修饰函数介绍,本文直接用实例来讲解各自的作用,并总结了各自的使用技巧,需要的朋友可以参考下 const修饰变量 关于const最常见的一个面试题是这样的:char *const和const char*有什么区别,大家都知道const修饰符代表的是常量,即const修饰的变量一旦被初始化是不能被更改的,这两个类型一个代表的是指针不可变,一个代表指针指向内容不可变,但具体哪个对应哪个,很多人一直搞不清楚. 有这样一个规律,const修饰的是它前面所有的数

  • Javascript中的高阶函数介绍 2015-01-26

    这篇文章主要介绍了Javascript中的高阶函数介绍,本文讲解了什么是高阶函数.Javascript的高阶函数.还原高阶函数.高阶函数使用实例等内容,需要的朋友可以参考下 这是一个有趣的东西,这或许也在说明Javascript对象的强大.我们要做的就是在上一篇说到的那样,输出一个Hello,World,而输入的东西是print('Hello')('World'),而这就是所谓的高阶函数. 高阶函数 高阶看上去就像是一种先进的编程技术的一个深奥术语,一开始我看到的时候我也这样认为的. Javas

  • javascript学习笔记(七) js函数介绍 2015-01-27

    javascript学习笔记之js函数介绍,需要的朋友可以参考下 1.函数内部属性 arguments arguments用来保存函数的参数,arguments.callee指向拥有arguments对象的函数 //阶乘 function factorial(num) { if (num <= 1) { return 1; } else { return num*arguments.callee(num-1); //用agreements.callee代替 } } var trueFactori

  • Python2.x和3.x下maketrans与translate函数使用上的不同 2015-01-28

    这篇文章主要介绍了Python2.x和3.x下maketrans与translate函数使用上的不同,这两个函数建立映射来替换内容是Python学习当中的基础知识,需要的朋友可以参考下 maketrans和translate函数是进行字符串字符编码的常用方法.本文着重点在于演示其基本用法和在不同版本下操作的差异.本文提到的2.X版本指2.6以上的版本,3.X版本指3.1以上的版本. 2.X版本把字符串基本分为两种:unicode字符串和8位字符串str,后者包含字节数据和我们常见的ASCII码数

  • PHP图像处理之imagecreate.imagedestroy函数介绍 2015-01-30

    这篇文章主要介绍了PHP图像处理之imagecreate.imagedestroy函数介绍,imagecreate用于创建一个图像,imagedestroy用于销毁一个图像,需要的朋友可以参考下 使用PHP的GD库处理图像时,必须对画布进行管理.创建画布就是在内存中开辟一块存储区域,以后在PHP中对图像的所有操作都是基于这个图布处理的,图布就是一个图像资源.在PHP中,可以使用imagecrete()和imageCreateTrueColor()两个函数创建指定的画布.这两个函数的作用是一致的,