F´ Flight Software - C/C++ Documentation
A framework for building embedded system applications to NASA flight quality standards.
Task.hpp
Go to the documentation of this file.
1 // ======================================================================
2 // \title Os/Posix/Task.hpp
3 // \brief definitions of Posix implementation of Os::Task
4 // ======================================================================
5 #ifndef Os_Posix_Task_hpp_
6 #define Os_Posix_Task_hpp_
7 
8 #include <pthread.h>
9 #include <Os/Task.hpp>
10 #include <atomic>
11 
12 #include <Fw/Deprecate.hpp>
13 #include <Fw/FPrimeBasicTypes.hpp>
15 #include <Os/Mutex.hpp>
16 #include <Os/TaskString.hpp>
17 
18 namespace Os {
19 namespace Posix {
20 namespace Task {
21 
24 struct PosixTaskHandle : public TaskHandle {
25  static constexpr int SUCCESS = 0;
26 
28  pthread_t m_task_descriptor;
30  bool m_is_valid = false;
31 };
32 
34 class PosixTask : public TaskInterface {
35  public:
40  };
41 
43  PosixTask() = default;
44 
46  ~PosixTask() = default;
47 
49  PosixTask(const PosixTask& other) = delete;
50 
52  PosixTask& operator=(const PosixTask& other) = delete;
53 
55  void onStart() override;
56 
62  //
67  Status start(const Arguments& arguments) override;
68 
75  Status join() override;
76 
84  void suspend(SuspensionType suspensionType) override;
85 
90  void resume() override;
91 
99  Status _delay(Fw::TimeInterval interval) override;
100 
103  TaskHandle* getHandle() override;
104 
105  private:
114  Status create(const Os::Task::Arguments& arguments, const PosixTask::PermissionExpectation permissions);
115 
116  PosixTaskHandle m_handle;
117  static std::atomic<bool> s_permissions_reported;
118 };
119 } // end namespace Task
120 } // end namespace Posix
121 } // end namespace Os
122 #endif
Task handle representation.
Definition: Task.hpp:33
~PosixTask()=default
default virtual destructor
void suspend(SuspensionType suspensionType) override
suspend the task given the suspension type
Definition: Task.cpp:201
static constexpr int SUCCESS
Definition: Task.hpp:25
Status _delay(Fw::TimeInterval interval) override
delay the current task
Definition: Task.cpp:209
PosixTask & operator=(const PosixTask &other)=delete
assignment operator is forbidden
bool m_is_valid
Is the above descriptor valid.
Definition: Task.hpp:30
PermissionExpectation
Enumeration of permission expectations.
Definition: Task.hpp:37
pthread_t m_task_descriptor
Posix task descriptor.
Definition: Task.hpp:28
TaskHandle * getHandle() override
return the underlying task handle (implementation specific)
Definition: Task.cpp:195
PosixTask()=default
default constructor
Expect that you do not hold necessary permissions.
Definition: Task.hpp:39
Expect that you hold necessary permissions.
Definition: Task.hpp:38
Status join() override
block until the task has ended
Definition: Task.cpp:184
Status start(const Arguments &arguments) override
start the task
Definition: Task.cpp:154
void resume() override
resume a suspended task
Definition: Task.cpp:205
void onStart() override
perform required task start actions
Definition: Task.cpp:152
Posix task implementation as driven by pthreads implementation.
Definition: Task.hpp:34