QThreadPool :: jobQueueSize()? QThreadPool :: finishedJobCount()

时间:2011-05-04 06:38:17

标签: multithreading qt4

有没有办法知道它完成了多少个工作?例如为什么没有类似QThreadPool::jobQueueSize()QThreadPool::finishedJobCount()QThreadPool::waitingJobCount()的方法。

我看到QRunnable提供任何此类功能。例如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();
}

1 个答案:

答案 0 :(得分:0)

QThreadPool是一个单例并使用接口实现习惯用法。这意味着实际的实现是由QThreadPoolPrivate类执行的,而QThreadPool只是接口。

第一种选择: 您需要修补QThreadPoolPrivate以获取所需的方法。

接下来,您需要修补QThreadPool以返回其隐藏的QThreadPoolPrivate实现 以便您可以访问此内部类

第二种选择: 修补QThreadPool的构造函数以注入您自己的实现,该实现提供您需要的方法。

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