#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.