mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-19 10:25:05 +03:00
Add a simple event loop to the cam application and use it in the main() function, with an example of how to handle SIGINT to gracefully stop the loop. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
39 lines
657 B
C++
39 lines
657 B
C++
/* 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();
|
|
}
|