QThread类理解

Qt中的QThread类提供了一种与平台无关的方式来管理线程。从QThread类实例化的一个对象可以管理程序中的一个线程。 

Thread::QThread(QObject *parent = Q_NULLPTR)

构造一个新的QThread来管理一个新的线程。 父类拥有QThread的所有权。 线程不会开始执行,直到start()被调用。

QThread::~QThread()

销毁QThread。

QThread *QThread::currentThread() static

返回一个指向当前正在执行的线程的指针。

Qt::HANDLE QThread::currentThreadId() static

返回当前正在执行的线程的线程句柄。
警告:此函数返回的句柄用于内部目的,不应在任何应用程序代码中使用。

bool QThread::event(QEvent *event) virtual

从QObject :: event()重新实现。

QAbstractEventDispatcher *QThread::eventDispatcher() const

返回指向线程的事件分派器对象的指针。 如果线程没有事件分派器,则此函数返回0。此功能在Qt 5.0中引入。

int QThread::exec() protected

进入事件循环并等待直到exit()被调用,返回传递给exit()的值。 如果exit()通过quit()调用,返回的值为0。
此函数旨在从run()内调用。 有必要调用此函数来启动事件处理。

void QThread::exit(int returnCode = 0)

告诉线程的事件循环使用returnCode退出。
调用此函数后,线程离开事件循环,并从调用返回到QEventLoop :: exec()。 QEventLoop :: exec()函数返回returnCode。
注意,与C库函数相同的名称不同,此函数不返回调用者 - 它是停止的事件处理。
QEventLoops直到QThread :: exec()被再次调用才会开始执行。 如果QThread :: exec()中的eventloop没有运行,那么下一个对QThread :: exec()的调用也将立即返回。

void QThread::finished() signal

该信号会在从相关联的线程完成执行之前发出。
发出此信号时,线程的事件循环已停止运行。 除了延迟删除事件之外,线程中不会处理更多事件。 此信号可以连接到QObject :: deleteLater(),以释放该线程中的对象。
注意:如果使用terminate()终止相关联的线程,则未定义从哪个线程发出此信号。
注意:这是一个私有信号。 它可以用于信号连接,但不能由用户发出。

int QThread::idealThreadCount() static

返回可在系统上运行的理想线程数。 这是通过查询系统中实际和逻辑的处理器内核数量来完成的。 如果无法检测到处理器核心数,则此函数返回-1。

bool QThread::isFinished() const

如果线程完成则返回true; 否则返回false。

bool QThread::isInterruptionRequested() const

如果在此线程上运行的任务应停止,则返回true。 中断可以通过requestInterruption()请求。此功能可用于使长时间运行的任务干净中断。 不要检查或作用于此函数返回的值是安全的,但建议在长时间运行的函数中定期执行。 注意不要太频繁地调用它,以保持开销低。

bool QThread::isRunning() const

如果线程正在运行,则返回true; 否则返回false。

void QThread::msleep(unsigned long msecs) static

强制当前线程休眠msecs毫秒。

Priority QThread::priority() const

返回正在运行的线程的优先级。 如果线程未运行,则此函数返回InheritPriority。

void QThread::quit() slot

告诉线程的事件循环退出,返回码为0(成功)。 相当于调用QThread :: exit(0)。
如果线程没有事件循环,此函数不执行任何操作。

void QThread::run() virtual protected

线程的起点。 调用start()后,新创建的线程调用此函数。 默认实现只需调用exec()。
您可以重新实现此功能以方便高级线程管理。 从这个方法返回将结束线程的执行。

void QThread::setEventDispatcher(QAbstractEventDispatcher *eventDispatcher)

将线程的事件分派器设置为eventDispatcher。 这是唯一可能的,只要没有为该线程安装事件分派器。 也就是说,在线程已经用start()启动之前,或者在主线程的情况下,在QCoreApplication被实例化之前。 此方法获取对象的所有权。

void QThread::setPriority(Priority priority)

此函数设置正在运行的线程的优先级。 如果线程未运行,则此函数不执行任何操作,并立即返回。 使用start()来启动具有特定优先级的线程。
优先级参数可以是QThread :: Priority枚举中的任何值,但InheritPriorty除外。
优先级参数的效果取决于操作系统的调度策略。 特别是,在不支持线程优先级的系统上将忽略优先级

void QThread::setStackSize(uint stackSize)

将线程的最大堆栈大小设置为stackSize。 如果stackSize大于零,则最大堆栈大小设置为stackSize字节,否则最大堆栈大小由操作系统自动确定。
警告:大多数操作系统对线程堆栈大小设置最小和最大限制。 如果堆栈大小超出这些限制,线程将无法启动。

void QThread::setTerminationEnabled(bool enabled = true)

根据启用的参数启用或禁用当前线程的终止。 线程必须已由QThread启动。
当启用为false时,将禁用终止。 未来调用QThread :: terminate()将立即返回而不起作用。 相反,终止被延迟,直到终止被启用。
当启用为真时,将启用终止。 未来调用QThread :: terminate()将正常终止线程。 如果终止被延迟(即QThread :: terminate()被调用,终止禁用),这个函数将立即终止调用线程。 注意,在这种情况下,此函数不会返回。

void QThread::sleep(unsigned long secs) static

强制当前线程休眠数秒钟。

uint QThread::stackSize() const

返回线程的最大堆栈大小(如果使用setStackSize()设置); 否则返回零。

void QThread::start(Priority priority = InheritPriority) slot

通过调用run()开始执行线程。 操作系统将根据优先级参数调度线程。 如果线程已经运行,则此函数不执行任何操作。
优先级参数的效果取决于操作系统的调度策略。 特别地,在不支持线程优先级的系统上将忽略优先级(例如在Linux上,有关详细信息,请参阅sched_setscheduler文档)。

void QThread::started() signal

当调用run()函数时,该信号在相关线程开始执行时发出。
注意:这是一个私有信号。 它可以用于信号连接,但不能由用户发出。

void QThread::terminate() slot

终止线程的执行。 线程可以或可以不立即终止,这取决于操作系统的调度策略。 在terminate()之后使用QThread :: wait(),确保。
当线程终止时,等待线程完成的所有线程将被唤醒。
警告:此功能很危险,不建议使用。 线程可以在其代码路径中的任何点终止。 线程可以在修改数据时终止。 没有机会自己清理线程,解锁任何保持的互斥体,等等。简言之,只有绝对必要时使用此功能。
可以通过调用QThread :: setTerminationEnabled()显式地启用或禁用终止。 在终止被禁用时调用此函数导致终止被延迟,直到终止被重新启用。 有关更多信息,请参阅QThread :: setTerminationEnabled()的文档。

void QThread::usleep(unsigned long usecs) static

强制当前线程休眠usecs微秒。

bool QThread::wait(unsigned long time = ULONG_MAX)

阻塞线程,直到满足以下任一条件:
与此QThread对象相关联的线程已完成执行(即,当它从run()返回时)。 如果线程完成,此函数将返回true。 如果线程尚未启动,它也返回true。
时间time已过。 如果时间是ULONG_MAX(默认值),那么等待永远不会超时(线程必须从run()返回)。 如果等待超时,此函数将返回false。

void QThread::yieldCurrentThread() static

如果有的话,产生当前线程到另一个可运行线程的执行。 注意,操作系统决定切换到哪个线程。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值