Home · All Classes · Modules  · QSS HELP  · QSS 案例 · VER007 HOME

QThreadPool Class Reference
[QtCore module]

该QThreadPool类管理QThreads的集合。More...

继承QObject

Methods

Static Methods


Detailed Description

该QThreadPool类管理QThreads的集合。

QThreadPool管理及recyles个人QThread对象以帮助减少在使用线程的程序线程的创建成本。每个Qt的应用程序有一个全局QThreadPool对象,它可以通过调用访问globalInstance( ) 。

要使用一个QThreadPool线程,子类QRunnable并实现run ( )虚函数。然后创建类的一个对象,并把它传递给QThreadPool.start( ) 。

 class HelloWorldTask : public QRunnable
 {
     void run()
     {
         qDebug() << "Hello world from thread" << QThread.currentThread();
     }
 }

 HelloWorldTask *hello = new HelloWorldTask();
 // QThreadPool takes ownership and deletes 'hello' automatically
 QThreadPool.globalInstance()->start(hello);

QThreadPool删除QRunnable自动默认。使用QRunnable.setAutoDelete()来更改自动删除标志。

QThreadPool支持执行相同QRunnable不止一次被从内部调用tryStart (本)QRunnable.run( ) 。如果autoDelete启用QRunnable当最后一个线程退出运行功能将被删除。调用start()多次使用相同的QRunnable当autoDelete启用创造竞争条件,因此不推荐。

线程是未使用一定量的时间会过期。默认的到期超时为30000毫秒( 30秒) 。这可以使用被改变setExpiryTimeout( ) 。设置一个负的到期超时禁用届满机制。

Call maxThreadCount( )来查询所使用的最大线程数。如果需要,你可以更改该限制setMaxThreadCount( ) 。默认maxThreadCount()是QThread.idealThreadCount( ) 。该activeThreadCount( )函数返回目前正在做的工作线程数。

reserveThread( )函数保留一个线程外用。使用releaseThread()时,你正在与线程完成的,以便它可以被重新使用。从本质上讲,这些功能暂时增加或减少活动线程数和执行耗时的操作是不可见的QThreadPool时是有用的。

注意, QThreadPool是用于管理线程一个低级别的类,见QtConcurrent.run()或其他Qt ConcurrentAPI进行更高层次的替代品。


Method Documentation

QThreadPool.__init__ (self, QObject parent = None)

parent的说法,如果不是没有,原因self通过Qt的,而不是PyQt的拥有。

构造一个线程池与给定parent

int QThreadPool.activeThreadCount (self)

int QThreadPool.expiryTimeout (self)

QThreadPool QThreadPool.globalInstance ()

返回全局QThreadPool实例。

int QThreadPool.maxThreadCount (self)

QThreadPool.releaseThread (self)

发布一个线程以前通过调用保留reserveThread( ) 。

Note:调用此函数之前没有预留一个线程暂时增加maxThreadCount( ) 。当一个线程进入睡眠状态,等待更多的工作,让其他线程继续,这是很有用的。一定要调用reserveThread( )进行等待,从而使线程池可以维持正确的时activeThreadCount( ) 。

See also reserveThread( ) 。

QThreadPool.reserveThread (self)

准备一个线程,无视activeThreadCount()和maxThreadCount( ) 。

一旦你与线程,调用来完成releaseThread()以允许它被重复使用。

Note:此功能将随时增加活动线程的数量。这意味着,通过使用此功能,可以为activeThreadCount( )返回的值大于maxThreadCount( ) 。

See also releaseThread( ) 。

QThreadPool.setExpiryTimeout (self, int expiryTimeout)

QThreadPool.setMaxThreadCount (self, int maxThreadCount)

QThreadPool.start (self, QRunnable runnable, int priority = 0)

保留一个线程,并使用它来运行runnable,除非这个线程将会使当前线程数超过maxThreadCount( ) 。在这种情况下,runnable被添加到一个运行队列来代替。该priority参数可以用来控制执行的运行队列的顺序。

需要注意的是线程池需要的所有权runnable如果runnable->autoDelete()返回True ,而runnable会后,由线程池自动删除runnable->run()回报。如果runnable->autoDelete()返回False,所有权runnable保持与来电者。注意,改变在自动删除runnable调用此函数后,会导致不确定的行为。

bool QThreadPool.tryStart (self, QRunnable runnable)

尝试保留一个线程来运行runnable

如果没有可用的线程在调用的时候,那么这个函数不执行任何操作并返回False 。否则,runnable立即运行使用一个可用的线程,这个函数返回True。

需要注意的是线程池需要的所有权runnable如果runnable->autoDelete()返回True ,而runnable会后,由线程池自动删除runnable->run()回报。如果runnable->autoDelete()返回False,所有权runnable保持与来电者。注意,改变在自动删除runnable调用此函数后会导致不确定的行为。

QThreadPool.waitForDone (self)

等待每一个线程退出并删除所有线程的线程池。

bool QThreadPool.waitForDone (self, int msecs)

这个函数的重载waitForDone( ) 。

最多等待msecs毫秒所有线程退出并删除所有线程的线程池。返回True如果被拆除的所有线程,否则返回False 。

此功能被引入Qt的4.8 。




PyQt 4.10.3 for X11 Copyright © Riverbank Computing Ltd and Nokia 2012 Qt 4.8.5