summaryrefslogtreecommitdiff
path: root/include/mbgl/actor/mailbox.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'include/mbgl/actor/mailbox.hpp')
-rw-r--r--include/mbgl/actor/mailbox.hpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/include/mbgl/actor/mailbox.hpp b/include/mbgl/actor/mailbox.hpp
index 8ecf91701a..23c579917a 100644
--- a/include/mbgl/actor/mailbox.hpp
+++ b/include/mbgl/actor/mailbox.hpp
@@ -1,5 +1,7 @@
#pragma once
+#include <mbgl/util/optional.hpp>
+
#include <memory>
#include <mutex>
#include <queue>
@@ -11,17 +13,30 @@ class Message;
class Mailbox : public std::enable_shared_from_this<Mailbox> {
public:
+
+ // Create a "holding" mailbox, messages to which will remain queued,
+ // unconsumed, until the mailbox is associated with a Scheduler using
+ // start(). This allows a Mailbox object to be created on one thread and
+ // later transferred to a different target thread that may not yet exist.
+ Mailbox();
+
Mailbox(Scheduler&);
- void push(std::unique_ptr<Message>);
-
+ // Attach the given scheduler to this mailbox and begin processing messages
+ // sent to it. The mailbox must be a "holding" mailbox, as created by the
+ // default constructor Mailbox().
+ void open(Scheduler& scheduler_);
void close();
+
+ bool isOpen() const;
+
+ void push(std::unique_ptr<Message>);
void receive();
static void maybeReceive(std::weak_ptr<Mailbox>);
private:
- Scheduler& scheduler;
+ optional<Scheduler*> scheduler;
std::recursive_mutex receivingMutex;
std::mutex pushingMutex;