Qt中的QThread类提供了一种与平台无关的方式来管理线程。从QThread类实例化的一个对象可以管理程序中的一个线程。
Thread::QThread(QObject*parent = Q_NULLPTR)
构造一个新的QThread来管理一个新的线程。 父类拥有QThread的所有权。 线程不会开始执行,直到start()被调用。
·
QThread::~QThread()
销毁QThread。
·
QThread*QThread::currentThread() static
返回一个指向当前正在执行的线程的指针。
·
Qt::HANDLEQThread::currentThreadId() static
返回当前正在执行的线程的线程句柄。
警告:此函数返回的句柄用于内部目的,不应在任何应用程序代码中使用。
·
boolQThread::event(QEvent *event) virtual
从QObject :: event()重新实现。
·
QAbstractEventDispatcher*QThread::eventDispatcher() const
返回指向线程的事件分派器对象的指针。 如果线程没有事件分派器,则此函数返回0。此功能在Qt 5.0中引入。
·
intQThread::exec() protected
进入事件循环并等待直到exit()被调用,返回传递给exit()的值。 如果exit()通过quit()调用,返回的值为0。
此函数旨在从run()内调用。 有必要调用此函数来启动事件处理。
·
voidQThread::exit(int returnCode = 0)
告诉线程的事件循环使用returnCode退出。
调用此函数后,线程离开事件循环,并从调用返回到QEventLoop ::exec()。 QEventLoop :: exec()函数返回returnCode。
注意,与C库函数相同的名称不同,此函数不返回调用者 - 它是停止的事件处理。
QEventLoops直到QThread :: exec()被再次调用才会开始执行。 如果QThread :: exec()中的eventloop没有运行,那么下一个对QThread :: exec()的调用也将立即返回。
·
voidQThread::finished() signal
该信号会在从相关联的线程完成执行之前发出。
发出此信号时,线程的事件循环已停止运行。 除了延迟删除事件之外,线程中不会处理更多事件。 此信号可以连接到QObject :: deleteLater(),以释放该线程中的对象。
注意:如果使用terminate()终止相关联的线程,则未定义从哪个线程发出此信号。
注意:这是一个私有信号。 它可以用于信号连接,但不能由用户发出。
·
intQThread::idealThreadCount() static
返回可在系统上运行的理想线程数。 这是通过查询系统中实际和逻辑的处理器内核数量来完成的。 如果无法检测到处理器核心数,则此函数返回-1。
·
boolQThread::isFinished() const
如果线程完成则返回true; 否则返回false。
·
boolQThread::isInterruptionRequested() const
如果在此线程上运行的任务应停止,则返回true。 中断可以通过requestInterruption()请求。此功能可用于使长时间运行的任务干净中断。 不要检查或作用于此函数返回的值是安全的,但建议在长时间运行的函数中定期执行。注意不要太频繁地调用它,以保持开销低。
·
boolQThread::isRunning() const
如果线程正在运行,则返回true; 否则返回false。
·
voidQThread::msleep(unsigned long msecs) static
强制当前线程休眠msecs毫秒。
·
PriorityQThread::priority() const
返回正在运行的线程的优先级。 如果线程未运行,则此函数返回InheritPriority。
·
voidQThread::quit() slot
告诉线程的事件循环退出,返回码为0(成功)。 相当于调用QThread :: exit(0)。
如果线程没有事件循环,此函数不执行任何操作。
·
voidQThread::run() virtual protected
线程的起点。 调用start()后,新创建的线程调用此函数。 默认实现只需调用exec()。
您可以重新实现此功能以方便高级线程管理。 从这个方法返回将结束线程的执行。
·
voidQThread::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)
将线程的事件分派器设置为eventDispatcher。 这是唯一可能的,只要没有为该线程安装事件分派器。也就是说,在线程已经用start()启动之前,或者在主线程的情况下,在QCoreApplication被实例化之前。此方法获取对象的所有权。
·
voidQThread::setPriority(Priority priority)
此函数设置正在运行的线程的优先级。 如果线程未运行,则此函数不执行任何操作,并立即返回。 使用start()来启动具有特定优先级的线程。
优先级参数可以是QThread :: Priority枚举中的任何值,但InheritPriorty除外。
优先级参数的效果取决于操作系统的调度策略。 特别是,在不支持线程优先级的系统上将忽略优先级
·
voidQThread::setStackSize(uint stackSize)
将线程的最大堆栈大小设置为stackSize。 如果stackSize大于零,则最大堆栈大小设置为stackSize字节,否则最大堆栈大小由操作系统自动确定。
警告:大多数操作系统对线程堆栈大小设置最小和最大限制。 如果堆栈大小超出这些限制,线程将无法启动。
·
voidQThread::setTerminationEnabled(bool enabled = true)
根据启用的参数启用或禁用当前线程的终止。 线程必须已由QThread启动。
当启用为false时,将禁用终止。 未来调用QThread :: terminate()将立即返回而不起作用。 相反,终止被延迟,直到终止被启用。
当启用为真时,将启用终止。 未来调用QThread :: terminate()将正常终止线程。如果终止被延迟(即QThread :: terminate()被调用,终止禁用),这个函数将立即终止调用线程。注意,在这种情况下,此函数不会返回。
·
voidQThread::sleep(unsigned long secs) static
强制当前线程休眠数秒钟。
·
uintQThread::stackSize() const
返回线程的最大堆栈大小(如果使用setStackSize()设置); 否则返回零。
·
voidQThread::start(Priority priority = InheritPriority) slot
通过调用run()开始执行线程。 操作系统将根据优先级参数调度线程。如果线程已经运行,则此函数不执行任何操作。
优先级参数的效果取决于操作系统的调度策略。 特别地,在不支持线程优先级的系统上将忽略优先级(例如在Linux上,有关详细信息,请参阅sched_setscheduler文档)。
·
voidQThread::started() signal
当调用run()函数时,该信号在相关线程开始执行时发出。
注意:这是一个私有信号。 它可以用于信号连接,但不能由用户发出。
·
voidQThread::terminate() slot
终止线程的执行。 线程可以或可以不立即终止,这取决于操作系统的调度策略。 在terminate()之后使用QThread :: wait(),确保。
当线程终止时,等待线程完成的所有线程将被唤醒。
警告:此功能很危险,不建议使用。 线程可以在其代码路径中的任何点终止。 线程可以在修改数据时终止。 没有机会自己清理线程,解锁任何保持的互斥体,等等。简言之,只有绝对必要时使用此功能。
可以通过调用QThread :: setTerminationEnabled()显式地启用或禁用终止。在终止被禁用时调用此函数导致终止被延迟,直到终止被重新启用。 有关更多信息,请参阅QThread ::setTerminationEnabled()的文档。
·
voidQThread::usleep(unsigned long usecs) static
强制当前线程休眠usecs微秒。
·
boolQThread::wait(unsigned long time = ULONG_MAX)
阻塞线程,直到满足以下任一条件:
与此QThread对象相关联的线程已完成执行(即,当它从run()返回时)。 如果线程完成,此函数将返回true。 如果线程尚未启动,它也返回true。
时间time已过。 如果时间是ULONG_MAX(默认值),那么等待永远不会超时(线程必须从run()返回)。 如果等待超时,此函数将返回false。
·
void QThread::yieldCurrentThread()static
如果有的话,产生当前线程到另一个可运行线程的执行。 注意,操作系统决定切换到哪个线程。