Как запустить какой-нибудь метод, который будет запускаться в другом потоке каждые 2 секунды? - PullRequest
0 голосов
/ 21 декабря 2018

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

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

     void StartTask(void* methodRoRun, long repeatTimeInSeconds);

, что означает, что метод получает указатель на функцию (methodRoRun), которая будет запускаться каждые секунды repeatTimeInSeconds.

Я не могу найти, как это сделать в C ++

1 Ответ

0 голосов
/ 21 декабря 2018

Примерно так:

#include <thread>
#include <functional>

void f() {
    printf("Task started\n");
    // do stuff
}

void StartTask(std::function<void()> methodRoRun, long repeatTimeInSeconds) {
    std::thread th([methodRoRun, repeatTimeInSeconds]() {
        while (true ) {
            methodRoRun();
            std::this_thread::sleep_for(std::chrono::seconds(repeatTimeInSeconds));
        }
    });
    th.detach();
}

int main() {
    StartTask([](){ f(); }, 1);

    while (true) {}

    return 0;
}

Редактировать:

Люди правильно указывают на то, что отсоединение потоков и наличие бесконечных циклов не является хорошей практикой, но пример просто иллюстрирует подход.

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