Можно вести учёт активных потоков файлами. Писать ид потока при старте в файл ну скажем [[thread_id]].lock, так же перед завершением потоков удалять этот lock файл потока и сверять количество файлов в папке с ограничением потоков, если файлов ≥ использовать success/fail с галкой "не перезапуска тебе поток" если же < то без галки. Все это довольно муторно в реализации конечно и стабильность логики должна быть железной т.к ошибки бас не обрабатывает а просто падает поток.
А привязку настроек времени можно сделать простой строкой вида время;число пример - 12:30;50 с 12:30 запускать по 50 потоков. И выставить потоков максимально возможное количество в натсройках или прибегать к при баса