该类提供平台独立的线程。
#include <QThread>
继承QObject
公共类型
enum
Priority { IdlePriority, LowestPriority, LowPriority, NormalPriority,
..., InheritPriority }
公共函数
QThread ( QObject * parent = 0 )
~QThread ()void exit ( int returnCode = 0 )bool isFinished () constbool
isRunning
() constPriority priority () constvoid setPriority ( Priority priority
)void setStackSize ( uint
stackSize )uint stackSize () constbool wait
( unsigned long time = ULONG_MAX )
公共槽
void quit ()void start (
Priority priority = InheritPriority )void terminate ()信号
void
finished ()void started ()void terminated ()静态公共成员
QThread *
currentThread ()Qt::HANDLE currentThreadId ()int idealThreadCount ()void
yieldCurrentThread ()
受保护的函数
int exec ()virtual void run
()静态受保护的成员
void msleep ( unsigned long msecs )void
setTerminationEnabled ( bool enabled = true )
void sleep ( unsigned
long secs )void usleep ( unsigned long usecs )详细描述
一个QThread代表一个独立的线程
控制在程序中。它分享数据和所有其他的线程,但是独立运行在一个多任务的操作系统中。代替开始
在main中,QThread开始在run。默认
的,run开始时间循环,通过调用exec。为了创建你自己的线程,建QThread的子类,并继承run。
例如:
class
MyThread : public QThread
{
public:
void run();
};
void MyThread::run()
{
QTcpSocket socket;
//
connect QTcpSocket's signals somewhere meaningful
...
socket.connectToHost(hostName, portNumber);
exec();
}
这将创
建一个QTcpSocket在这个线程中,运行线程的时间循环。使用start方法来开始运行。当你返回从run,运行结束,就像一个应
用那样当
你离开main。QThread将注意你发出一个信号,当线程started,finished,terminated,或者你能用isFinished
和isRunning
来查询线程的状态,使用wait来阻塞,直到线程已经完成运行。
每个线程得到他自己的堆栈从操作系统中。操作系统也
决定堆栈的默认大小。你能使用setStackSize来设置一个惯例的堆栈大小。
每个QThread能有他自己的事件循环。你能开始事件循环通
过调用exec。你能停止它通过调用exit或quit。拥有一个事件循环使信号和
槽的链接成为可能。使用一个机制叫做队列链接。它也使使用那些
要求事件循环的类成为可能,例如QTimer和QTcpSocket。注意,尽
管如此,那是不可能的使用任何widget的类。
在极端情
况下,你可能想强制terminate一个线程。尽管如此,那样做是危险地和应该被阻止的。请读文件为terminate和
setTerminationEnabled。
静
态函数currentThreadId和currentThread返回目前运行的线程的标示符。
QThread也提供平台独立的sleep函
数。使用sleep,msleep,usleep。
成员类型文件
enum QThread::Priority
enum类型代表
操作系统怎样安排新产生的线程。
内容 值描述
QThread::IdlePriority0
安排只是当没有其他线程在运行
QThread::LowestPriority 1 安排少于低优先级
QThread::LowPriority2
安排少于正常优先级
QThread::NormalPriority 3 默认的操作系统优先级
QThread::HighPriority4
安排高于正常优先级
QThread::HighestPriority 5 安排高于高优先级
QThread::TimeCriticalPriority
6 尽可能的安排
QThread::InheritPriority7 使用同样的优先级,这是默认的
成员函数文件
QThread::QThread(QObject*
parent=0)
构造一个新的线程用被给的parent。这个线程不开始运行直到start被调用
QThread::~QThread
()
摧毁线程
注意删除一个线程对象将不停止运行线程。删除一个运行的QThread将可能导致一个程序冲突。你能wait来确保它完
成。
QThread * QThread::currentThread () [static]
返回一个代表目前运行的线程的指
针。
Qt::HANDLE QThread::currentThreadId () [static]
返回线程句柄。
警
告:该函数返回的句柄是被使用为了内部目的,不应该被用于任何应用的代码。
在windows,返回值是一个假句柄。它不能被使用为数值比较。这个
函数返回DWORD返回被win32函数getCurrentThreadId,不是被
getCurrentThread返回的handle。
int
QThread::exec () [protected]
进入事件循环,等直到exit被调用。如果通过quit调用exit,返回值将
是0。那是必须的调用这个函数来开始事件循环。
void QThread::exit ( int returnCode = 0 )
告
诉线程的事件循环来退出
在调用这个函数后,线程离开事件循环,返回从QEventLoop::exec()。并且返回返回码。
根据协定,
返回0代表成功,非0代表失败
注意不像c函数,这个函数返回caller—it is event processing thar
stops.
如果没有一个事件循环,这个函数不做任何事情。
void QThread::finished () [signal]
这
个信号被发出当线程结束运行。
int QThread::idealThreadCount () [static]
返回能被运行在
系统上的理想的线程数。
bool QThread::isFinished () const
返回true如果线程是完成的。
bool
QThread::isRunning () const
void QThread::msleep ( unsigned long
msecs ) [static protected]
Priority QThread::priority () const
返
回一个线程的优先级,如果函数不运行,返回inheritPriority
void QThread::quit () [slot]
等
同于exit(0).
void QThread::run () [virtual protected]
线程的开始点。在调用
start后,新的线程调用这个函数,默认的继承调用exec。
你能重载这个函数来做其他有用的工作。
void
QThread::setPriority ( Priority priority )
设置优先级
void
QThread::setStackSize ( uint stackSize )
设置最大的堆栈大小为线程。
警告:大部分操作系统预
设最大和最小限制在线程堆栈大小上。这个线程将失败开始,如果堆栈是不在这个限制范围内
void
QThread::setTerminationEnabled ( bool enabled = true ) [static
protected]
设置terminate()函数的有效性。
void QThread::sleep ( unsigned
long secs ) [static protected]
uint QThread::stackSize () const
void
QThread::start ( Priority priority = InheritPriority ) [slot]
开始运行
程序通过调用run。
void QThread::started () [signal]
当线程开始,发出该信号。
void
QThread::terminate () [slot]
终止运行的线程。这个线程可能马上终止,也可能延时终止。在terminate
后使用wait 同步终止。
警告:这个函数是危险地,不被鼓励使用。
void QThread::terminated ()
[signal]
void QThread::usleep ( unsigned long usecs ) [static
protected]
bool QThread::wait ( unsigned long time = ULONG_MAX )
阻
塞线程直到这些情况被遇到
线程结束运行。
Time已经过去。(超时)
void
QThread::yieldCurrentThread () [static]
让开线程给另一个可运行的线程。注意这由操作系统决定
Qt线程中有一个公共的抽象类,所有的线程都是从这个QThread抽象类中派生的,要实现QThread中的纯虚函数run(),run()函数是通过
start()函数来实现调用的。例如:
1 class MyThread : public QThread {
2 public:
3 virtual void run();
4 };
5
6 void MyThread::run()
7 {
8 for( int count =
0; count < 20; count++ ) {
9 sleep( 1 );
10
qDebug( "Ping!" );
11 }
12 }
13
14 int
main()
15 {
16 MyThread a;
17 MyThread b;
18
19 a.start();//自动调用run(),否则即使该线程创建,也是一开始就挂起
20
b.start();
21 //要等待线程a,b都退出
22 a.wait();
23
b.wait();
24 }
25
分享到:
相关推荐
Qt多线程编程实例,QThread用法详解,基于主线程发送创建随机数个数,子线程进行创建和其他子线程进行冒泡排序、快速排序等,再将排序结果回传给主线程进行显示结果和进度显示。
Qt多线程编程实例,QThread用法详解,基于主线程发送创建随机数个数,子线程进行创建和其他子线程进行冒泡排序、快速排序等,再将排序结果回传给主线程进行显示结果和进度显示。资源含源码,版本5.9.5以上可直接运行...
本示例采用继承QThread的方式创建线程,在创建的子线程中计数,并将计数的数值通过信号与槽的方式发送至主线程,在主线程的UI界面上显示出来。
Qt 使用多线程QThread实现进度条
Qt案例之利用QThread类实现简单多线程案例循环打印数字,可参考文章:https://blog.csdn.net/didi_ya/article/details/122661092
QT线程QThread的推荐用法 在 代码示例中, QT线程单次运行一个函数,推荐用QtConcurrent::run() 在另一个线程中运行一个函数
用PyQt中的QThread类实现多线程 利用PyQt中的pyqtSignal类实现信息的触发和捕获,即定义事件和订阅事件 利用QThread类实现多线程的方法 1,新建一个python类,继承自QThread from PyQt5.QtCore import QThread ...
2.调用代码园龄: 11年4个月粉丝: 29关注: 1+加关注2019年12月搜索找找看常用链接我的随笔我的评论我的参与最新评论我的标签随笔分类编译器或电脑问题
QT线程示例,QT线程示例,QT线程示例,QT线程示例
QThread是我们将要详细介绍的第一个类。它也是 Qt 线程类中最核心的底层类。由于 PyQt 的跨平台特性,QThread要隐藏掉所有平台相关的代码。
Qt+Opencv+QThread,Qt多线程同时显示多路USB摄像头信息至ui界面, 请注意,每个USB摄像头应单独连接至PC机,不能将多个USB摄像头连接在同一个USB hub上再连接PC机; 适用于刚接触Opencv,Qt,希望通过Qt结合Opencv...
Qt例程源代码QThread.7z
多线程案例,是关于QT在VS2010平台的多线程小案例
QThread类常用方法及信号.png
由于只有UI主线程才可以操作桌面UI,那么在多线程中,其它线程的数据若要显示出来,可以通过全局共用变量来实现,或者通过线程通信的方式来实现,本例程就是通过UI上的按钮启动线程,在线程中发送信号到UI主线程,并...
Qt QThread 学习工作源代码,可以直接使用
封装基础的QTcpSocket、QThread、QTcpServer; 服务器监听后,每新来一个连接起一个线程,完全线程独立; 通过socketDescrptor传递socket; 不建议工程中使用该种模式,这只是一个简单的demo学习了解即可; 实际工程...
1.引言多线程对于需要处理耗时任务的应用很有用,一方面响应用户操作、更新界面显示,另一方面在“后台”进行耗时操作,比如大量运算、复制大文件、网络传输等。使用Qt
Qt中使用QThread来管理线程,一个QThread对象,就是一个线程。QThread对象也有消息循序exec()函数,用来处理自己这个线程的事件。 Qt实现多线程有两种方式 1、Qt第一种创建线程方式 首先要继承QThread ...