7#include <condition_variable>
20 TaskLinux(
const char *name,
int stackSize,
int priority = 1,
int core = -1) {
26 TaskLinux() =
default;
28 ~TaskLinux() { remove(); }
30 bool create(
const char *name,
int stackSize,
int priority = 1,
39 bool begin(std::function<
void()> process) {
40 if (running_thread.joinable())
return false;
42 terminate_flag =
false;
45 running_thread = std::thread([
this] { this->thread_loop(); });
49 void end() { remove(); }
52 terminate_flag =
true;
54 if (running_thread.joinable()) {
55 if (std::this_thread::get_id() == running_thread.get_id()) {
57 running_thread.detach();
59 running_thread.join();
65 std::lock_guard<std::mutex> lk(mtx);
71 std::lock_guard<std::mutex> lk(mtx);
78 std::thread::id &getTaskHandle() {
return thread_id; }
80 void setReference(
void *r) { ref = r; }
81 void *getReference() {
return ref; }
84 std::thread running_thread;
85 std::thread::id thread_id{};
86 std::function<void()> loop_code = nop;
88 std::atomic<bool> terminate_flag{
false};
90 std::condition_variable cv;
94 std::this_thread::sleep_for(std::chrono::milliseconds(100));
98 thread_id = std::this_thread::get_id();
99 while (!terminate_flag.load()) {
102 std::unique_lock<std::mutex> lk(mtx);
103 cv.wait(lk, [
this] {
return !paused || terminate_flag.load(); });
105 if (terminate_flag.load())
break;
114using Task = TaskLinux;
Definition: Allocator.h:13
TaskRTOS Task
Definition: TaskRTOS.h:117