00001 #line 432 "./lpsrc/flx_pthread.pak"
00002 #ifndef __FLX_PTHREAD_WIN_POSIX_CONDV_EMUL_H__
00003 #define __FLX_PTHREAD_WIN_POSIX_CONDV_EMUL_H__
00004
00005
00006
00007 #include "flx_pthread_config.hpp"
00008 #if FLX_WIN32
00009 #include <windows.h>
00010
00011 typedef HANDLE pthread_mutex_t;
00012 typedef void pthread_mutexattr_t;
00013 typedef void pthread_condattr_t;
00014
00015 struct pthread_cond_t
00016 {
00017 int waiters_count_;
00018
00019
00020 CRITICAL_SECTION waiters_count_lock_;
00021
00022
00023 HANDLE sema_;
00024
00025
00026
00027 HANDLE waiters_done_;
00028
00029
00030
00031
00032 size_t was_broadcast_;
00033
00034
00035 };
00036
00037
00038 #define ETIMEDOUT WAIT_TIMEOUT
00039
00040 #ifndef EAGAIN
00041 #define EAGAIN WAIT_TIMEOUT
00042 #endif
00043
00044 int PTHREAD_EXTERN pthread_mutex_init (pthread_mutex_t*, const pthread_mutexattr_t*);
00045 int PTHREAD_EXTERN pthread_mutex_lock(pthread_mutex_t*);
00046 int PTHREAD_EXTERN pthread_mutex_unlock(pthread_mutex_t*);
00047 int PTHREAD_EXTERN pthread_mutex_destroy(pthread_mutex_t*);
00048
00049 int PTHREAD_EXTERN pthread_cond_init (pthread_cond_t*, const pthread_condattr_t*);
00050 int PTHREAD_EXTERN pthread_cond_destroy(pthread_cond_t*);
00051 int PTHREAD_EXTERN pthread_cond_wait (pthread_cond_t*, pthread_mutex_t*);
00052 int PTHREAD_EXTERN pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, struct timespec const*);
00053 int PTHREAD_EXTERN pthread_cond_uswait(pthread_cond_t*, pthread_mutex_t*, unsigned long us);
00054 int PTHREAD_EXTERN pthread_cond_signal (pthread_cond_t*);
00055 int PTHREAD_EXTERN pthread_cond_broadcast (pthread_cond_t*);
00056
00057
00058 typedef HANDLE sem_t;
00059
00060 int PTHREAD_EXTERN sem_init(sem_t *sem, int pshared, unsigned int value);
00061 int PTHREAD_EXTERN sem_wait(sem_t * sem);
00062 int PTHREAD_EXTERN sem_trywait(sem_t * sem);
00063 int PTHREAD_EXTERN sem_post(sem_t * sem);
00064 int PTHREAD_EXTERN sem_getvalue(sem_t * sem, int * sval);
00065 int PTHREAD_EXTERN sem_destroy(sem_t * sem);
00066
00067 #else
00068 #include <errno.h>
00069 #include <pthread.h>
00070 #include <semaphore.h>
00071
00072 int PTHREAD_EXTERN pthread_cond_uswait( pthread_cond_t*, pthread_mutex_t*, unsigned long us);
00073 #endif
00074 #endif
00075