1#pragma once
2
3#include <memory>
4
5namespace mbgl {
6
7class Mailbox;
8
9/*
10 A `Scheduler` is responsible for coordinating the processing of messages by
11 one or more actors via their mailboxes. It's an abstract interface. Currently,
12 the following concrete implementations exist:
13
14 * `ThreadPool` can coordinate an unlimited number of actors over any number of
15 threads via a pool, preserving the following behaviors:
16
17 - Messages from each individual mailbox are processed in order
18 - Only a single message from a mailbox is processed at a time; there is no
19 concurrency within a mailbox
20
21 Subject to these constraints, processing can happen on whatever thread in the
22 pool is available.
23
24 * `Scheduler::GetCurrent()` is typically used to create a mailbox and `ActorRef`
25 for an object that lives on the main thread and is not itself wrapped an
26 `Actor`. The underlying implementation of this Scheduler should usually be
27 a `RunLoop`
28 auto mailbox = std::make_shared<Mailbox>(*Scheduler::Get());
29 Actor<Worker> worker(threadPool, ActorRef<Foo>(*this, mailbox));
30*/
31class Scheduler {
32public:
33 virtual ~Scheduler() = default;
34
35 // Used by a Mailbox when it has a message in its queue to request that it
36 // be scheduled. Specifically, the scheduler is expected to asynchronously
37 // call `receive() on the given mailbox, provided it still exists at that
38 // time.
39 virtual void schedule(std::weak_ptr<Mailbox>) = 0;
40
41 // Set/Get the current Scheduler for this thread
42 static Scheduler* GetCurrent();
43 static void SetCurrent(Scheduler*);
44};
45
46} // namespace mbgl
47

source code of qtlocation/src/3rdparty/mapbox-gl-native/include/mbgl/actor/scheduler.hpp