00001
00002
00003 #ifndef __J2K__Thread_HPP__
00004 #define __J2K__Thread_HPP__
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #include <j2k/Fred/QNX/System.hpp>
00017
00018
00019 #define DEFAULT_STACK 4096
00020 #define DEFAULT_ALGO SCHED_RR
00021 #define DEFAULT_PRIO 12
00022 #define DEFAULT_NODE 0
00023
00024
00025 #define S_FIFO SCHED_FIFO
00026 #define S_ROUND_ROBIN SCHED_RR
00027 #define S_ADAPTIVE SCHED_OTHER
00028
00029
00030 #define MSG_NONE 0
00031 #define MSG_STOP 1
00032 #define MSG_REFRESH 2
00033 #define MSG_YIELD 3
00034 #define MSG_PRINT 4
00035 #define MSG_FUNCTION 5
00036
00037 class Thread {
00038
00039
00040 private:
00041
00042 Thread( const Thread& thread );
00043 inline int yield();
00044
00045 public:
00046
00047 inline Thread();
00048
00049
00050 inline virtual ~Thread();
00051
00052 static void FAR Thread::Wrapper( void* ptrThis );
00053
00054 void start( size_t stack_size = DEFAULT_STACK,
00055 int alg = DEFAULT_ALGO,
00056 int prio = DEFAULT_PRIO );
00057
00058 inline void refresh();
00059 inline void stop();
00060
00061
00062 inline pid_t getPID();
00063 inline int isStarted();
00064
00065
00066 virtual void run() = 0;
00067
00068
00069 inline size_t getStack() { return start_stack; }
00070 inline int getStartAlgo() { return start_algo; }
00071 inline int getStartPriority() { return start_prio; }
00072
00073
00074 inline int getPriority();
00075 inline void setPriority( int prio );
00076 inline void resetPriority();
00077
00078 inline int getScheduler();
00079 inline void setScheduler( int sched );
00080 inline void resetScheduler();
00081
00082 inline struct sched_param* getSchedulerParam();
00083 inline void setSchedulerParam( struct sched_param* param );
00084 inline void resetSchedulerParam();
00085
00086
00087 protected:
00088 pid_t pid;
00089
00090
00091 pid_t rpid;
00092 Msg_t msg;
00093 Msg_t rmsg;
00094 Msg_t smsg;
00095
00096
00097 private:
00098 size_t start_stack;
00099 int start_algo;
00100 int start_prio;
00101 struct sched_param* start_param;
00102 };
00103
00104 #endif