You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
650 B
30 lines
650 B
#ifndef BACKGROUND_TASK_H
|
|
#define BACKGROUND_TASK_H
|
|
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/task.h>
|
|
#include <mutex>
|
|
#include <list>
|
|
#include <condition_variable>
|
|
#include <atomic>
|
|
|
|
class BackgroundTask {
|
|
public:
|
|
BackgroundTask(uint32_t stack_size = 4096 * 2);
|
|
~BackgroundTask();
|
|
|
|
void Schedule(std::function<void()> callback);
|
|
void WaitForCompletion();
|
|
|
|
private:
|
|
std::mutex mutex_;
|
|
std::list<std::function<void()>> main_tasks_;
|
|
std::condition_variable condition_variable_;
|
|
TaskHandle_t background_task_handle_ = nullptr;
|
|
std::atomic<size_t> active_tasks_{0};
|
|
|
|
void BackgroundTaskLoop();
|
|
};
|
|
|
|
#endif
|