Как создать поток каждые X секунд, но только если предыдущий итерационный поток завершен в C ++ 11? - PullRequest
0 голосов
/ 20 января 2020

У меня есть следующее требование: «Создавать отдельный рабочий поток каждые X секунд, но только в том случае, если ранее созданный отдельный поток завершается. Если по истечении времени ожидания предыдущий поток не завершается, завершите его и создайте новый поток. "

Обратите внимание, что у меня есть требование создания отдельного потока, потому что я не хочу, чтобы мой основной поток ожидал его завершения sh.

Я использую C ++ 11 класс темы.

Любая помощь по этому вопросу?

Заранее спасибо.

1 Ответ

3 голосов
/ 20 января 2020

Чтобы построить комментарий Седата Капаноглу, вы можете запустить новый поток в конце текущего, но добавить тайм-аут, если "каждая 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();
}

Вы, конечно, можете добавить условия, чтобы проверить, должен ли новый поток быть запущен или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...