QRunnable инкапсулирует задачу, которую вы хотите выполнить в отдельном потоке. Если вам нужно знать, какой поток выполняет эту задачу или разделить ее между потоками, то вы, вероятно, делаете что-то более сложное, чем то, что QThreadPool предназначен для расширения возможностей. В этом случае вы можете создать собственное поведение, используя QThread напрямую. «Запуск» QRunnable с помощью QThreadPool аналогичен постановке этой задачи в очередь для доступного потока в пуле. Принимая во внимание, что запуск QThread фактически выделяет новый поток ОС и выполняет его.
Пул потоков будет управлять конечным числом потоков с рабочей очередью экземпляров QRunnable. Когда поток станет доступным, ему будет присвоен QRunnable для обработки. Вам не нужно явно создавать экземпляры QThread, если вы используете QThreadPool с QRunnable. Обратите внимание, что вы все равно должны обеспечить синхронизацию общих ресурсов (например, с QMutex, QMutexLocker, QReadWriteLock, QSemaphore и / или QWaitCondition) при использовании в экземплярах QRunnable.