/
auroraos
/
mirror_gn
Обзор
Документация
Войти
/
auroraos
/
mirror_gn
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
src/util/msg_loop.h
46 строк
1 KB
Brett Wilson
C++ modernization improvements.
11 авг 2021, 23:17
11 авг 2021, 23:17
69ec4fc
Код
Авторство
О чём код?
// Copyright 2018 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UTIL_RUN_LOOP_H_ #define UTIL_RUN_LOOP_H_ #include <condition_variable> #include <functional> #include <mutex> #include <queue> class MsgLoop { public: MsgLoop(); ~MsgLoop(); // Blocks until PostQuit() is called, processing work items posted via void Run(); // Schedules Run() to exit, but will not happen until other outstanding tasks // complete. Can be called from any thread. void PostQuit(); // Posts a work item to this queue. All items will be run on the thread from // which Run() was called. Can be called from any thread. void PostTask(std::function<void()> task); // Run()s until the queue is empty. Should only be used (carefully) in tests. void RunUntilIdleForTesting(); // Gets the MsgLoop for the thread from which it's called, or nullptr if // there's no MsgLoop for the current thread. static MsgLoop* Current(); private: std::mutex queue_mutex_; std::queue<std::function<void()>> task_queue_; std::condition_variable notifier_; bool should_quit_ = false; MsgLoop(const MsgLoop&) = delete; MsgLoop& operator=(const MsgLoop&) = delete; }; #endif // UTIL_RUN_LOOP_H_