5 _thread = std::thread(&PersistentWorker::loop,
this);
11 std::lock_guard<std::mutex> lock(_mtx);
15 if (_thread.joinable())
21 std::lock_guard<std::mutex> lock(_mtx);
22 _tasks[name] = jobToExecute;
28 std::lock_guard<std::mutex> lock(_mtx);
33 void PersistentWorker::loop()
35 std::unordered_map<std::string, std::function<void()>> copy;
37 bool keepGoing =
true;
40 std::unique_lock<std::mutex> lock(_mtx);
41 _cv.wait(lock, [
this] {
return !_running || !_tasks.empty(); });
49 for (std::pair<std::string, std::function<
void()>> element : copy)
55 catch (
const std::exception& e)
58 std::cerr <<
"[PersistentWorker] Task '" << element.first
59 <<
"' threw an exception: " << e.what() << std::endl;
64 std::cerr <<
"[PersistentWorker] Task '" << element.first
65 <<
"' threw an unknown exception." << std::endl;
67 std::this_thread::sleep_for(std::chrono::milliseconds(
PAUSE_BT_TASK));
71 std::lock_guard<std::mutex> lock(_mtx);
void removeTask(const std::string &name)
void addTask(const std::string &name, const std::function< void()> &jobToExecute)