// Copyright 2025 Vincent Batts // https://en.cppreference.com/w/cpp/thread/thread // https://en.cppreference.com/w/cpp/thread/mutex // https://en.cppreference.com/w/cpp/thread/condition_variable #ifndef WORKER_H_ #define WORKER_H_ #include #include #include #include namespace Dang { class Worker { public: Worker() { this->ready = false; } void run() { std::unique_lock lock(this->mtx); // Wait until 'ready' is set to true this->cv.wait(lock, [this] { return this->ready; }); std::cout << "Daemon process woke up!" << std::endl; } int work() { std::thread daemon([this] {this->run();}); std::this_thread::sleep_for(std::chrono::seconds(5)); { std::lock_guard lock(this->mtx); this->ready = true; } this->cv.notify_one(); daemon.join(); return 0; } private: std::mutex mtx; std::condition_variable cv; bool ready; }; } // namespace Dang #endif // WORKER_H_ // vim:set sts=2 sw=2 et: