#pragma once #include #include #include #include #include // OnThreadExecutor allows its caller to off-load some work to a persistently running background thread. // This might come in handy if you use the API which sets thread-wide global state and the state needs // to be isolated. class OnThreadExecutor final { public: using task_t = std::packaged_task; OnThreadExecutor(); ~OnThreadExecutor(); std::future submit(task_t task); void cancel(); private: void worker_thread(); std::mutex _task_mutex; std::condition_variable _task_cv; std::atomic_bool _shutdown_request; std::queue> _task_queue; std::thread _worker_thread; };