#ifndef __JV_WIN32_THREADS__
#define __JV_WIN32_THREADS__
#include <windows.h>
typedef HANDLE _Jv_ConditionVariable_t;
typedef HANDLE _Jv_Mutex_t;
typedef struct
{
int flags; HANDLE handle; java::lang::Thread *thread_obj;
} _Jv_Thread_t;
typedef void _Jv_ThreadStartFunc (java::lang::Thread *);
inline void
_Jv_CondInit (_Jv_ConditionVariable_t *cv)
{
*cv = CreateEvent (NULL, 0, 0, NULL);
}
#define _Jv_HaveCondDestroy
inline void
_Jv_CondDestroy (_Jv_ConditionVariable_t *cv)
{
CloseHandle (*cv);
cv = NULL;
}
int _Jv_CondWait (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *mu,
jlong millis, jint nanos);
inline int
_Jv_CondNotify (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *)
{
return PulseEvent (*cv) ? 0 : _JV_NOT_OWNER; }
inline int
_Jv_CondNotifyAll (_Jv_ConditionVariable_t *cv, _Jv_Mutex_t *)
{
return PulseEvent (*cv) ? 0 : _JV_NOT_OWNER; }
inline void
_Jv_MutexInit (_Jv_Mutex_t *mu)
{
*mu = CreateMutex (NULL, 0, NULL);
}
#define _Jv_HaveMutexDestroy
inline void
_Jv_MutexDestroy (_Jv_Mutex_t *mu)
{
CloseHandle (*mu);
mu = NULL;
}
int _Jv_MutexLock (_Jv_Mutex_t *mu);
inline int
_Jv_MutexUnlock (_Jv_Mutex_t *mu)
{
return ReleaseMutex(*mu) ? 0 : GetLastError(); }
void _Jv_InitThreads (void);
_Jv_Thread_t *_Jv_ThreadInitData (java::lang::Thread *thread);
void _Jv_ThreadDestroyData (_Jv_Thread_t *data);
inline java::lang::Thread *
_Jv_ThreadCurrent (void)
{
extern DWORD _Jv_ThreadKey;
return (java::lang::Thread *) TlsGetValue(_Jv_ThreadKey);
}
inline _Jv_Thread_t *
_Jv_ThreadCurrentData (void)
{
extern DWORD _Jv_ThreadDataKey;
return (_Jv_Thread_t *) TlsGetValue(_Jv_ThreadDataKey);
}
inline void
_Jv_ThreadYield (void)
{
Sleep (0);
}
void _Jv_ThreadRegister (_Jv_Thread_t *data);
void _Jv_ThreadUnRegister ();
void _Jv_ThreadSetPriority (_Jv_Thread_t *data, jint prio);
void _Jv_ThreadStart (java::lang::Thread *thread, _Jv_Thread_t *data,
_Jv_ThreadStartFunc *meth);
void _Jv_ThreadWait (void);
void _Jv_ThreadInterrupt (_Jv_Thread_t *data);
#undef TRUE
#undef FALSE
#undef MAX_PRIORITY
#undef MIN_PRIORITY
#undef min
#undef max
#undef interface
#undef STRICT
#undef VOID
#endif