// %flair:license{ // This file is part of the Flair framework distributed under the // CECILL-C License, Version 1.0. // %flair:license} /*! * \file Thread_impl.h * \brief Classe définissant un thread * \author Guillaume Sanahuja, Copyright Heudiasyc UMR UTC/CNRS 7253 * \date 2012/10/04 * \version 4.0 */ #ifndef THREAD_IMPL_H #define THREAD_IMPL_H #include #include #include #ifdef __XENO__ #include #else #include #endif namespace flair { namespace core { class Thread; class IODevice; class ConditionVariable; } } class Thread_impl { public: Thread_impl(flair::core::Thread *self, uint8_t priority,uint32_t stackSize); ~Thread_impl(); void Start(void); void Join(void); void SafeStop(void); bool ToBeStopped(void); void SetPeriodUS(uint32_t period); uint32_t GetPeriodUS(void) const; void SetPeriodMS(uint32_t period); uint32_t GetPeriodMS(void) const; void WaitPeriod(void); void Suspend(void); bool SuspendUntil(flair::core::Time date); void Resume(void); bool IsSuspended(void); int WaitUpdate(const flair::core::IODevice *device); bool period_set; bool isRunning; private: flair::core::Thread *self; flair::core::ConditionVariable *cond; uint8_t priority; uint32_t stackSize; flair::core::Time max_latency, min_latency, mean_latency; flair::core::Time last; uint64_t cpt; flair::core::Time period; bool tobestopped; bool is_suspended; void PrintStats(void); void ComputeLatency(flair::core::Time time); #ifdef __XENO__ RT_TASK task_rt; static void main_rt(void *arg); #else pthread_t task_nrt; static void *main_nrt(void *arg); flair::core::Time next_time; #endif }; #endif // THREAD_IMPL_H