QT线程池的使用(QThreadPool类和QRunnable类).docxVIP

  • 1
  • 0
  • 约3.96千字
  • 约 7页
  • 2025-05-13 发布于四川
  • 举报

QT线程池的使用(QThreadPool类和QRunnable类).docx

QT线程池的使用(QThreadPool类和QRunnable类)

目录QThreadPool类主要属性主要成员函数QRunnable类主要成员函数程序实例

QThreadPool类

用来管理QThreads。此类中的所有函数都是线程安全的.

主要属性

1、activeThreadCount:此属性表示线程池中的活动线程数,通过activeThreadCount()调用。

2、expiryTimeout:线程活着的时间。没有设置expiryTimeout毫秒的线程会自动退出,此类线程将根据需要重新启动。默认的expiryTimeout为30000毫秒(30秒)。如果expiryTimeout为负,则新创建的线程将不会过期,在线程池被销毁之前,它们将不会退出。通过expiryTimeout()调用,通setExpiryTimeout(intexpiryTimeout)设置。

3、maxThreadCount:int表示线程池使用的最大线程数。

通过maxThreadCount()调用,通过setMaxThreadCount(intmaxThreadCount)设置

注意:即使maxThreadCount限制为零或为负数,线程池也至少有1个线程。

主要成员函数

QThreadPool*QThreadPool::globalInstance()

返回Qt应用程序全局线程池实例。

voidreserveThread()

预约一个线程,这个函数总是会增加活动线程的数量。这意味着通过使用这个函数,activeThreadCount()可以返回一个大于maxThreadCount()的值。

voidreleaseThread()

释放以前通过调用reserveThread()预约的线程。

如果不先预约一个线程,调用这个函数会临时增加maxThreadCount()。当线程进入休眠等待时,能够允许其他线程继续。

要记得在完成等待时调用reserveThread(),以便线程池可以正确控制activeThreadCount()。

voidQThreadPool::start(QRunnable*runnable,intpriority=0)

在任务数量小于maxThreadCount时,为每个runnable任务预约一个线程。超过maxThreadCount时,将任务放入运行队列中。priority参数用来设置线程运行优先级。

booltryStart(QRunnable*runnable)

此方法尝试预约一个线程来运行runnable。

如果在调用的时候没有线程可用,那么这个函数什么都不做,并返回false。否则,将使用一个可用线程立即运行runnable,并返回此函数true。

voidclear()

用于删除在任务队列中,还没有启动的任务。

booltryTake(QRunnable*runnable)

如果runnable任务还没开始运行,那么从队列中删除此runable任务,此时函数返回true;如果runnable任务已经运行,返回false。

只用来删除runnable-autoDelete()==false的runnable任务,否则可能会删错任务.

boolwaitForDone(intmsecs=-1)

等待msecs毫秒,以便所有线程退出并从线程池中移除所有线程。如果删除了所有线程,则返回true,否则,它将返回false。默认等待时间为-1,即等待最后一个线程退出。

QRunnable类

QRunnable类是所有runable对象的基类。

QRunnable类是一个接口,用于表示需要执行的任务或代码段,具体任务在run()函数内部实现。

可以使用QThreadPool在各个独立的线程中执行代码。如果autoDelete()返回true(默认值),QThreadPool将自动删除QRunnable。使用setAutoDelete()可更改是否自动删除。

主要成员函数

boolautoDelete()const

获取自动删除是否启用,启用返回true,未启用返回false。

virtualvoidrun()=0

纯虚函数,在QRunnable子类中实现详细任务处理逻辑。

voidsetAutoDelete(bool

文档评论(0)

1亿VIP精品文档

相关文档