worker: put this threaded worker into a class for cleanliness

Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
This commit is contained in:
Vincent Batts 2025-02-10 13:59:21 -05:00
parent f332b0868a
commit 06b00b9f97
Signed by: vbatts
GPG key ID: E30EFAA812C6E5ED

View file

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