QThread类理解

来源:互联网 发布:淘宝卖家和买家都被骗 编辑:程序博客网 时间:2024/05/21 01:52
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
原创粉丝点击