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__