2011-05-04 46 views
1

有什么办法可以知道它已经完成了多少个作业?例如为什么没有像QThreadPool::jobQueueSize()QThreadPool::finishedJobCount()QThreadPool::waitingJobCount()这样的方法。QThreadPool :: jobQueueSize()? QThreadPool :: finishedJobCount()

我看到QRunnable s提供任何这样的功能。像started()finished()

我应该做一个像这样的黑客。在QRunnable::run()

/** 
* Assuming _controller has a link to all the Runnables. and I've a finite number of QRunnables that I recycle in my own Way. 
*/ 
void MyRunnable::run(){ 
    mutex.lock(); 
    _controller->markAsStarted(this); 
    mutex.unlock(); 
    .... 
    mutex.lock(); 
    _controller->markAsFinished(this); 
    mutex.unlock(); 
} 

回答

0

QThreadPool是独立的,并使用该接口实现成语。这意味着实际的实现是由QThreadPoolPrivate类执行的,QThreadPool只是接口。

第一种替代方法: 您需要修补QThreadPoolPrivate才能获得所需的方法。

接下来,你需要修补QThreadPool回到其隐藏QThreadPoolPrivate实施 这样您就可以访问这个内部类

第二个选择: 补丁的QThreadPool构造函数中注入自己的实现提供了你需要的方法。

在这两种情况下,您都需要修补Qt的源代码。

相关问题