diff options
Diffstat (limited to 'src/cam/event_loop.cpp')
-rw-r--r-- | src/cam/event_loop.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/src/cam/event_loop.cpp b/src/cam/event_loop.cpp new file mode 100644 index 00000000..e8ab8617 --- /dev/null +++ b/src/cam/event_loop.cpp @@ -0,0 +1,39 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ +/* + * Copyright (C) 2019, Google Inc. + * + * event_loop.cpp - cam - Event loop + */ + +#include <libcamera/event_dispatcher.h> + +#include "event_loop.h" + +using namespace libcamera; + +EventLoop::EventLoop(EventDispatcher *dispatcher) + : dispatcher_(dispatcher) +{ +} + +EventLoop::~EventLoop() +{ +} + +int EventLoop::exec() +{ + exitCode_ = -1; + exit_.store(false, std::memory_order_release); + + while (!exit_.load(std::memory_order_acquire)) + dispatcher_->processEvents(); + + return exitCode_; +} + +void EventLoop::exit(int code) +{ + exitCode_ = code; + exit_.store(true, std::memory_order_release); + dispatcher_->interrupt(); +} |