c ++ запускать каждые 10 минут - PullRequest
0 голосов
/ 05 июля 2018

Я хочу, чтобы эта программа запускалась при каждом запуске (вызове) 10 минут.

Но я не нашел решения, как вызывать (запускать) программу каждые 10 минут, на коде c ++ (man.exe). Я хотел бы использовать код в Visual Studio 2013

 int runevery() {
        system("start man.exe");
        return true;
    }

Звоните:

#ifdef MAN_RUN
    runevery();
#endif

Заранее благодарю за помощь!

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Вы можете создать другой поток, который периодически выполняет эту функцию, пока не будет остановлен. Пример:

#include <mutex>
#include <chrono>
#include <thread>
#include <iostream>
#include <functional>
#include <condition_variable>

class PeriodicAction {
    std::mutex m_;
    std::condition_variable c_;
    bool stop_ = false;
    std::function<void()> const f_;
    std::chrono::seconds const initial_delay_;
    std::chrono::seconds const delay_;
    std::thread thread_;

    bool wait(std::chrono::seconds delay) {
        std::unique_lock<std::mutex> lock(m_);
        c_.wait_for(lock, delay, [this]() { return stop_; });
        return !stop_;
    }

    void thread_fn() {
        for(auto delay = initial_delay_; this->wait(delay); delay = delay_)
            f_();
    }

public:
    PeriodicAction(std::chrono::seconds initial_delay,
                   std::chrono::seconds delay,
                   std::function<void()> f)
        : f_(move(f))
        , initial_delay_(initial_delay)
        , delay_(delay)
        , thread_(&PeriodicAction::thread_fn, this)
    {}

    ~PeriodicAction() {
        this->stop();
        thread_.join();
    }

    void stop() {
        {
            std::unique_lock<std::mutex> lock(m_);
            stop_ = true;
        }
        c_.notify_one();
    }
};

char const* now_c_str() {
    auto time_t = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
    return std::ctime(&time_t);
}

int main(int ac, char**) {
    using namespace std::literals::chrono_literals;

    // Print current time for the next 5 seconds and then terminate.
    PeriodicAction a(0s, 1s, []() { std::cout << now_c_str(); });
    std::this_thread::sleep_for(5s);
}

Применительно к вашему делу:

PeriodicAction a(0s, 600s, [](){ system("start man.exe"); });
0 голосов
/ 05 июля 2018

Я не думаю, что это хорошая идея, но ее легко достичь следующим образом:

#include <thread>
#include <chrono>

int main()
{
    while (true)
        {
        std::this_thread::sleep_for(std::chrono::minutes(10));
        system("man.exe");
        }
}

Я все еще думаю, что согласно моему предыдущему комментарию, запланированное задание в Windows было бы лучше и проще в настройке.

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