Чтобы построить комментарий Седата Капаноглу, вы можете запустить новый поток в конце текущего, но добавить тайм-аут, если "каждая X секунда" еще не прошла.
Вы можете сделать это с помощью функции-оболочки.
Возможно, что-то похожее на это:
void worker_wrapper()
{
using namespace std::chrono_literals;
auto start = std::chrono::system_clock::now();
// Run actual worker function
worker();
auto end = std::chrono::system_clock::now();
// If less than 300 seconds have passed, wait for the remainder of the 300 seconds
if (end - start < 300s)
{
std::this_thread::sleep_for(300s - (end - start));
}
// Create a new thread
std::thread next_thread(worker_wrapper);
next_thread.detach();
}
Вы, конечно, можете добавить условия, чтобы проверить, должен ли новый поток быть запущен или нет.