39 template <
typename Object>
42 template <
typename TupleArgs>
44 std::promise<void> running_;
45 running = running_.get_future();
46 thread = std::thread([
this,
48 capturedArgs = std::forward<TupleArgs>(args),
49 runningPromise = std::move(running_),
50 prioritySetter = std::move(prioritySetter_)]()
mutable {
52 if (prioritySetter) prioritySetter();
61 runningPromise.set_value();
65 (void) establishedActor;
74 template <
typename... Args>
78 template <
typename... Args>
79 Thread(
const std::function<
void()>& prioritySetter,
const std::string& name, Args&&... args)
80 :
Thread(prioritySetter, name,
std::make_tuple(
std::forward<Args>(args)...)) {}
87 std::promise<void> stoppable;
94 stoppable.set_value();
97 stoppable.get_future().get();
108 return object.self();
120 paused = std::make_unique<std::promise<void>>();
121 resumed = std::make_unique<std::promise<void>>();
123 auto pausing = paused->get_future();
128 auto resuming = resumed->get_future();
142 resumed->set_value();
149 MBGL_STORE_THREAD(tid);
155 std::future<void> running;
157 std::unique_ptr<std::promise<void>> paused;
158 std::unique_ptr<std::promise<void>> resumed;
void invoke(Priority priority, Fn &&fn, Args &&... args)
Manages a thread with Object.
Thread(const std::function< void()> &prioritySetter, const std::string &name, Args &&... args)
Thread(const std::string &name, Args &&... args)
ActorRef< std::decay_t< Object > > actor()
Thread(std::function< void()> prioritySetter_, const std::string &name, TupleArgs &&args)
std::unique_ptr< Expression > string(std::unique_ptr< Expression >, std::unique_ptr< Expression > def=nullptr)
std::function< void()> makeThreadPrioritySetter(std::string threadType)
#define MBGL_VERIFY_THREAD(tid)