mirror of
https://git.libcamera.org/libcamera/libcamera.git
synced 2025-07-26 01:55:51 +03:00
libcamera: thread: Add a messaging passing API
Create a new Message class to model a message that can be passed to an object living in another thread. Only an invalid message type is currently defined, more messages will be added in the future. The Thread class is extended with a messages queue, and the Object class with thread affinity. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
parent
525b19c410
commit
01b930964a
7 changed files with 354 additions and 2 deletions
|
@ -8,26 +8,39 @@
|
|||
#define __LIBCAMERA_OBJECT_H__
|
||||
|
||||
#include <list>
|
||||
#include <memory>
|
||||
|
||||
namespace libcamera {
|
||||
|
||||
class Message;
|
||||
class SignalBase;
|
||||
template<typename... Args>
|
||||
class Signal;
|
||||
class Thread;
|
||||
|
||||
class Object
|
||||
{
|
||||
public:
|
||||
Object();
|
||||
virtual ~Object();
|
||||
|
||||
void postMessage(std::unique_ptr<Message> msg);
|
||||
virtual void message(Message *msg);
|
||||
|
||||
Thread *thread() const { return thread_; }
|
||||
void moveToThread(Thread *thread);
|
||||
|
||||
private:
|
||||
template<typename... Args>
|
||||
friend class Signal;
|
||||
friend class Thread;
|
||||
|
||||
void connect(SignalBase *signal);
|
||||
void disconnect(SignalBase *signal);
|
||||
|
||||
Thread *thread_;
|
||||
std::list<SignalBase *> signals_;
|
||||
unsigned int pendingMessages_;
|
||||
};
|
||||
|
||||
}; /* namespace libcamera */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue