00001 00010 #ifndef _THREAD_H_ 00011 #define _THREAD_H_ 00012 00013 #include "../jnilib.h" 00014 00015 #ifdef __cplusplus 00016 extern "C" { 00017 #endif 00018 00020 #define CLS_THREAD "at/fhv/sgr/threading/JNIThread" 00021 00022 struct Thread_; 00023 00024 struct ThreadCPP_; 00025 00026 #ifdef __cplusplus 00027 typedef ThreadCPP_ Thread; 00028 #define createThread createThreadCPP 00029 #define deleteThread deleteThreadCPP 00030 #else 00031 typedef struct Thread_ Thread; 00032 #define createThread createThreadC 00033 #define deleteThread deleteThreadC 00034 #endif 00035 00039 typedef struct ThreadData { 00040 jclass clsthread; 00041 jobject thread; 00042 jmethodID mstart; 00043 jmethodID msetPriority; 00044 jmethodID mgetPriority; 00045 jmethodID msleep; 00046 jmethodID myield; 00047 } ThreadData; 00048 00052 typedef struct Thread_ { 00053 ThreadData thread; 00054 jobject (*getObject)(Thread* thread); 00055 void (*start)(Thread* thread); 00056 void (*setPriority)(Thread* thread, jint priority); 00057 jint (*getPriority)(Thread* thread); 00058 void (*sleep)(Thread* thread, jlong milliseconds); 00059 void (*yield)(Thread* thread); 00060 } Thread_; 00061 00065 typedef struct ThreadCPP_ { 00066 ThreadData thread; 00067 struct Thread_ *functions; 00068 00069 #ifdef __cplusplus 00070 jobject getObject() { 00071 return functions->getObject(this); 00072 } 00073 00074 void start() { 00075 functions->start(this); 00076 } 00077 00078 void setPriority(jint priority) { 00079 functions->setPriority(this, priority); 00080 } 00081 00082 jint getPriority() { 00083 return functions->getPriority(this); 00084 } 00085 00086 void sleep(jlong milliseconds) { 00087 functions->sleep(this, milliseconds); 00088 } 00089 00090 void yield() { 00091 functions->yield(this); 00092 } 00093 00094 #endif 00095 } ThreadCPP_; 00096 00097 00098 void createThreadC(Thread_* thread, void (*func)()); 00099 void createThreadCPP(ThreadCPP_* thread, void (*func)()); 00100 void deleteThreadC(Thread_* thread); 00101 void deleteThreadCPP(ThreadCPP_* thread); 00102 00103 #ifdef __cplusplus 00104 } /* extern "C" */ 00105 #endif 00106 00107 #endif /* _THREAD_H_ */ 00108 00109 /* end of file thread.h */