mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-22 08:05:06 +03:00
Mutex classes are defined in mutex.h. This replaces thread.h include for the Mutex classes with mutex.h. Signed-off-by: Hirokazu Honda <hiroh@chromium.org> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Umang Jain <umang.jain@ideasonboard.com> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
72 lines
1.3 KiB
C++
72 lines
1.3 KiB
C++
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
/*
|
|
* Copyright (C) 2019, Google Inc.
|
|
*
|
|
* thread.h - Thread support
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include <sys/types.h>
|
|
#include <thread>
|
|
|
|
#include <libcamera/base/private.h>
|
|
|
|
#include <libcamera/base/message.h>
|
|
#include <libcamera/base/signal.h>
|
|
#include <libcamera/base/utils.h>
|
|
|
|
namespace libcamera {
|
|
|
|
class EventDispatcher;
|
|
class Message;
|
|
class Object;
|
|
class ThreadData;
|
|
class ThreadMain;
|
|
|
|
class Thread
|
|
{
|
|
public:
|
|
Thread();
|
|
virtual ~Thread();
|
|
|
|
void start();
|
|
void exit(int code = 0);
|
|
bool wait(utils::duration duration = utils::duration::max());
|
|
|
|
bool isRunning();
|
|
|
|
Signal<> finished;
|
|
|
|
static Thread *current();
|
|
static pid_t currentId();
|
|
|
|
EventDispatcher *eventDispatcher();
|
|
|
|
void dispatchMessages(Message::Type type = Message::Type::None);
|
|
|
|
protected:
|
|
int exec();
|
|
virtual void run();
|
|
|
|
private:
|
|
void startThread();
|
|
void finishThread();
|
|
|
|
void postMessage(std::unique_ptr<Message> msg, Object *receiver);
|
|
void removeMessages(Object *receiver);
|
|
|
|
friend class Object;
|
|
friend class ThreadData;
|
|
friend class ThreadMain;
|
|
|
|
void moveObject(Object *object);
|
|
void moveObject(Object *object, ThreadData *currentData,
|
|
ThreadData *targetData);
|
|
|
|
std::thread thread_;
|
|
ThreadData *data_;
|
|
};
|
|
|
|
} /* namespace libcamera */
|