Как ограничить количество потоков?
#incude <omp.h>

void func()
{
std::vector<std::string> allFileNames;

// заполнить вектор путями всех нужных файлов в директории

#pragma omp parallel for num_threads(4)
for( auto & fileName : allFileNames )
{
    // делать всякое

#pragma omp critical
{
  // тут делать всякое без конфликтов между потоками
}

}

}
Если стоит задача реализации с помощью 4-х потоков, то нужно использовать 4 потока. ThreadPool нужен для гибкой настройки использования потоков, например не больше 4-х в зависимости от входных условий.