Skip to content
API Documentation
BastionGuard™
bsc::task::TaskRunner Class Reference

#include <TaskRunner.hpp>

Classes

struct  TaskState

Public Member Functions

 ~TaskRunner ()
void every (const std::string &name, std::chrono::milliseconds interval, std::function< void()> fn)
bool stop_task (const std::string &name)
bool has_task (const std::string &name) const
void stop ()

Private Attributes

std::mutex mutex_
std::unordered_map< std::string, std::unique_ptr< TaskState > > tasks_
std::atomic_bool shutdown_ {false}

Detailed Description

Definition at line 13 of file TaskRunner.hpp.

Constructor & Destructor Documentation

◆ ~TaskRunner()

bsc::task::TaskRunner::~TaskRunner ( )

Definition at line 7 of file TaskRunner.cpp.

7{ stop(); }

References stop().

Member Function Documentation

◆ every()

void bsc::task::TaskRunner::every ( const std::string & name,
std::chrono::milliseconds interval,
std::function< void()> fn )

Definition at line 9 of file TaskRunner.cpp.

9 {
10 stop_task(name);
11 if (shutdown_) return;
12
13 auto state = std::make_unique<TaskState>();
14 state->interval = interval;
15 state->fn = std::move(fn);
16 auto* ptr = state.get();
17 state->thread = std::thread([this, ptr]() {
18 while (!shutdown_ && ptr->running) {
19 ptr->fn();
20 for (std::chrono::milliseconds elapsed{0}; !shutdown_ && ptr->running && elapsed < ptr->interval; elapsed += std::chrono::milliseconds(100)) {
21 std::this_thread::sleep_for(std::chrono::milliseconds(100));
22 }
23 }
24 });
25
26 std::lock_guard lock(mutex_);
27 tasks_[name] = std::move(state);
28}
bool stop_task(const std::string &name)
std::unordered_map< std::string, std::unique_ptr< TaskState > > tasks_
std::atomic_bool shutdown_

References mutex_, shutdown_, stop_task(), and tasks_.

Referenced by bsc::service::DaemonService::run().

◆ has_task()

bool bsc::task::TaskRunner::has_task ( const std::string & name) const

Definition at line 44 of file TaskRunner.cpp.

44 {
45 std::lock_guard lock(mutex_);
46 return tasks_.contains(name);
47}

References mutex_, and tasks_.

◆ stop()

void bsc::task::TaskRunner::stop ( )

Definition at line 49 of file TaskRunner.cpp.

49 {
50 shutdown_ = true;
51 std::unordered_map<std::string, std::unique_ptr<TaskState>> tasks;
52 {
53 std::lock_guard lock(mutex_);
54 tasks.swap(tasks_);
55 }
56 for (auto& [_, task] : tasks) task->running = false;
57 for (auto& [_, task] : tasks) if (task->thread.joinable()) task->thread.join();
58}
#define _(s)

References _, mutex_, shutdown_, and tasks_.

Referenced by ~TaskRunner().

◆ stop_task()

bool bsc::task::TaskRunner::stop_task ( const std::string & name)

Definition at line 30 of file TaskRunner.cpp.

30 {
31 std::unique_ptr<TaskState> task;
32 {
33 std::lock_guard lock(mutex_);
34 auto it = tasks_.find(name);
35 if (it == tasks_.end()) return false;
36 task = std::move(it->second);
37 tasks_.erase(it);
38 }
39 task->running = false;
40 if (task->thread.joinable()) task->thread.join();
41 return true;
42}

References mutex_, and tasks_.

Referenced by every().

Member Data Documentation

◆ mutex_

std::mutex bsc::task::TaskRunner::mutex_
mutableprivate

Definition at line 30 of file TaskRunner.hpp.

Referenced by every(), has_task(), stop(), and stop_task().

◆ shutdown_

std::atomic_bool bsc::task::TaskRunner::shutdown_ {false}
private

Definition at line 32 of file TaskRunner.hpp.

Referenced by every(), and stop().

◆ tasks_

std::unordered_map<std::string, std::unique_ptr<TaskState> > bsc::task::TaskRunner::tasks_
private

Definition at line 31 of file TaskRunner.hpp.

Referenced by every(), has_task(), stop(), and stop_task().


The documentation for this class was generated from the following files:
  • BastionGuard/thirdparty/bastionguard-secure-connection/daemon/include/bsc/task/TaskRunner.hpp
  • BastionGuard/thirdparty/bastionguard-secure-connection/daemon/src/task/TaskRunner.cpp