C ++睡眠时间不确定

时间:2019-12-10 11:36:05

标签: c++ sleep

在我的代码中,我希望系统进入睡眠状态,直到满足条件为止。经过一番搜索,我发现了#include <unistd.h>,但对我来说,它看起来一直处于休眠状态,直到达到时间范围为止。我想知道是否有一种简单的方法可以让程序等到条件达到为止。

在这里,您有一个代码示例来阐明我的观点

bool check() {
   while (condition) {
       sleep.here();
   } else {
       run.the.rest();
   }
}

1 个答案:

答案 0 :(得分:1)

根据您不完整的伪代码和描述,这是一个类contidion_t,您可以在其中通过set_condition设置条件,并且loop中的线程阻塞将被唤醒,每次设置它。

#include <iostream>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <atomic>

struct condition_t {
public:
    template <typename T>
    void loop(T the_rest)  {
        while(running) {
            std::unique_lock<std::mutex> lock_guard(m);
            cv.wait(lock_guard, [this] { return ready.load(); });
            the_rest();
            ready = false;
        }
    }

    void set_condition(bool value) {
        ready = value;
        if (value) {
            cv.notify_one();
        }
    }

    void stop_running() {
        running = false;
        ready = true;
        cv.notify_all();
    }
    ~condition_t () {stop_running();}

private:
    std::mutex m;
    std::condition_variable cv;
    std::atomic<bool> ready{false};
    std::atomic<bool> running{true};
};

int main() {
    condition_t condition;
    std::thread thread(&condition_t::loop<void (void)>, &condition, [] () {
        std::cout << "Doing the rest" << std::endl;
    });
    std::cout << "Thread created but waits\nInput something for continue:";
    int something;
    std::cin >> something;
    std::cout << "Continueing\n";
    condition.set_condition(true);
    std::cout << "Input something to stop running:";
    std::cin >> something;
    condition.stop_running();

    thread.join();
}
相关问题