Hace poco tuve que usar QThreadPool, el uso básico sería este: // Puede ser una función tradicional o un método estático. // func puede recibir hasta un máximo de 5 parámetros. void func(QMutex *mutex, otrosParametros) { mutex->lock(); // Hacer lo que haya que hacer aquí. mutex->unlock(); } int N = 1000; QThreadPool threadPool; // El mutex se usa para bloquear la modificación simultanea // de prametros globales. QMutex mutex; for (int i = 0; i < int; i++) { QtConcurrent::run(&threadPool, func, &mutex, otrosParametros); } threadPool.waitForDone(); // Hacer algo con el resultado de los threads.