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 FwSizeType PTHREAD_NAME_LENGTH = 16;
26  static constexpr int SUCCESS = 0;
27 
29  pthread_t m_task_descriptor;
31  bool m_is_valid = false;
32 #if defined(POSIX_THREADS_ENABLE_NAMES) && POSIX_THREADS_ENABLE_NAMES
34 #endif
35 };
36 
38 class PosixTask : public TaskInterface {
39  public:
44  };
45 
47  PosixTask() = default;
48 
50  ~PosixTask() = default;
51 
53  PosixTask(const PosixTask& other) = delete;
54 
56  PosixTask& operator=(const PosixTask& other) = delete;
57 
59  void onStart() override;
60 
66  //
71  Status start(const Arguments& arguments) override;
72 
79  Status join() override;
80 
88  void suspend(SuspensionType suspensionType) override;
89 
94  void resume() override;
95 
103  Status _delay(Fw::TimeInterval interval) override;
104 
107  TaskHandle* getHandle() override;
108 
109  private:
118  Status create(const Os::Task::Arguments& arguments, const PosixTask::PermissionExpectation permissions);
119 
120  PosixTaskHandle m_handle;
121  static std::atomic<bool> s_permissions_reported;
122 };
123 } // end namespace Task
124 } // end namespace Posix
125 } // end namespace Os
126 #endif
Task handle representation.
Definition: Task.hpp:33
PlatformSizeType FwSizeType
~PosixTask()=default
default virtual destructor
void suspend(SuspensionType suspensionType) override
suspend the task given the suspension type
Definition: Task.cpp:230
static constexpr int SUCCESS
Definition: Task.hpp:26
Status _delay(Fw::TimeInterval interval) override
delay the current task
Definition: Task.cpp:238
PosixTask & operator=(const PosixTask &other)=delete
assignment operator is forbidden
bool m_is_valid
Is the above descriptor valid.
Definition: Task.hpp:31
PermissionExpectation
Enumeration of permission expectations.
Definition: Task.hpp:41
pthread_t m_task_descriptor
Posix task descriptor.
Definition: Task.hpp:29
TaskHandle * getHandle() override
return the underlying task handle (implementation specific)
Definition: Task.cpp:224
static constexpr FwSizeType PTHREAD_NAME_LENGTH
Length of pthread name.
Definition: Task.hpp:25
PosixTask()=default
default constructor
Expect that you do not hold necessary permissions.
Definition: Task.hpp:43
Expect that you hold necessary permissions.
Definition: Task.hpp:42
Status join() override
block until the task has ended
Definition: Task.cpp:213
Status start(const Arguments &arguments) override
start the task
Definition: Task.cpp:183
void resume() override
resume a suspended task
Definition: Task.cpp:234
void onStart() override
perform required task start actions
Definition: Task.cpp:181
Posix task implementation as driven by pthreads implementation.
Definition: Task.hpp:38