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

#multithreading #qt4

#многопоточность #qt4

Вопрос:

Есть ли какой-либо способ узнать, сколько заданий он закончил выполнять? например, почему нет такого метода, как QThreadPool::jobQueueSize() or QThreadPool::finishedJobCount() или QThreadPool::waitingJobCount() .

Я не вижу, чтобы QRunnable s предлагали какую-либо подобную функциональность. например started() или finished()

Должен ли я выполнить взлом, подобный. in 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:

QThreadPool является синглтоном и использует идиому реализации интерфейса. Это означает, что фактическая реализация выполняется классом QThreadPoolPrivate, а QThreadPool — это просто интерфейс.

Первый вариант: вам нужно исправить QThreadPoolPrivate, чтобы получить нужные методы.

Затем вам нужно исправить QThreadPool, чтобы вернуть его скрытую реализацию QThreadPoolPrivate, чтобы вы могли получить доступ к этому внутреннему классу

Вторая альтернатива: исправьте конструктор QThreadPool, чтобы внедрить вашу собственную реализацию, которая предоставляет необходимые вам методы.

В обоих случаях вам необходимо исправить исходный код Qt.