[QtCore module]
该QThreadPool类管理QThreads的集合。More…
继承QObject。
Methods
__init__ (self, QObject parent = None)
int activeThreadCount (self)
int expiryTimeout (self)
int maxThreadCount (self)
releaseThread (self)
reserveThread (self)
setExpiryTimeout (self, int expiryTimeout)
setMaxThreadCount (self, int maxThreadCount)
start (self, QRunnable runnable, int priority = 0)
bool tryStart (self, QRunnable runnable)
waitForDone (self)
bool waitForDone (self, int msecs)
Static Methods
QThreadPool globalInstance ()
Detailed Description
该QThreadPool类管理QThreads的集合。
QThreadPool管理及recyles个人QThread对象以帮助减少在使用线程的程序线程的创建成本。每个Qt的应用程序有一个全局QThreadPool对象,它可以通过调用访问globalInstance( ) 。
要使用一个QThreadPool线程,子类QRunnable并实现run ( )虚函数。然后创建类的一个对象,并把它传递给QThreadPool.start( ) 。
class HelloWorldTask : public [QRunnable](docs_qrunnable.html)
{
void run()
{
qDebug() << "Hello world from thread" << [QThread](docs_qthread.html).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 ()
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 。