00001 #ifndef __VXTHREAD_H__
00002 #define __VXTHREAD_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00037
00039 #include <vxWorks.h>
00040 #include <semLib.h>
00041 #include <taskLib.h>
00042
00043
00045
00047 extern "C" void omni_thread_wrapper(void* ptr);
00048
00049
00051
00052
00054 #define OMNI_MUTEX_IMPLEMENTATION \
00055 SEM_ID mutexID; \
00056 bool m_bConstructed;
00057
00058 #define OMNI_CONDITION_IMPLEMENTATION \
00059 long waiters_; \
00060 SEM_ID waiters_lock_; \
00061 SEM_ID sema_;
00062
00063 #define OMNI_SEMAPHORE_IMPLEMENTATION \
00064 SEM_ID semID;
00065
00066 #define OMNI_MUTEX_LOCK_IMPLEMENTATION \
00067 if(semTake(mutexID, WAIT_FOREVER) != OK) \
00068 { \
00069 throw omni_thread_fatal(errno); \
00070 }
00071
00072 #define OMNI_MUTEX_UNLOCK_IMPLEMENTATION \
00073 if(semGive(mutexID) != OK) \
00074 { \
00075 throw omni_thread_fatal(errno); \
00076 }
00077
00078 #define OMNI_THREAD_IMPLEMENTATION \
00079 friend void omni_thread_wrapper(void* ptr); \
00080 static int vxworks_priority(priority_t); \
00081 omni_condition *running_cond; \
00082 void* return_val; \
00083 int tid; \
00084 public: \
00085 static void attach(void); \
00086 static void detach(void); \
00087 static void show(void);
00088
00089
00091
00093
00094
00095
00096
00098 #define main( discarded_argc, discarded_argv ) \
00099 omni_discard_retval() \
00100 { \
00101 throw; \
00102 } \
00103 int omni_main( int argc, char **argv ); \
00104 void launch( ) \
00105 { \
00106 omni_thread* th = new omni_thread( (void(*)(void*))omni_main );\
00107 th->start();\
00108 }\
00109 int omni_main( int argc, char **argv )
00110
00111
00112 #endif // ndef __VXTHREAD_H__