add pthread_self/pthread_equal for win32
This commit is contained in:
parent
1b84f79f4c
commit
0e46c1e8ba
@ -18,17 +18,18 @@
|
|||||||
struct pthread_once {
|
struct pthread_once {
|
||||||
INIT_ONCE once;
|
INIT_ONCE once;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct pthread_once pthread_once_t;
|
typedef struct pthread_once pthread_once_t;
|
||||||
|
|
||||||
static BOOL CALLBACK _pthread_once_win32_cb(PINIT_ONCE once, PVOID param, PVOID *context)
|
static inline BOOL CALLBACK
|
||||||
|
_pthread_once_win32_cb(PINIT_ONCE once, PVOID param, PVOID *context)
|
||||||
{
|
{
|
||||||
void (*cb) (void) = param;
|
void (*cb) (void) = param;
|
||||||
cb();
|
cb();
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pthread_once(pthread_once_t *once, void (*cb) (void))
|
static inline int
|
||||||
|
pthread_once(pthread_once_t *once, void (*cb) (void))
|
||||||
{
|
{
|
||||||
BOOL rc = InitOnceExecuteOnce(&once->once, _pthread_once_win32_cb, cb, NULL);
|
BOOL rc = InitOnceExecuteOnce(&once->once, _pthread_once_win32_cb, cb, NULL);
|
||||||
if (rc == 0)
|
if (rc == 0)
|
||||||
@ -37,6 +38,25 @@ static int pthread_once(pthread_once_t *once, void (*cb) (void))
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct pthread {
|
||||||
|
HANDLE handle;
|
||||||
|
};
|
||||||
|
typedef struct pthread pthread_t;
|
||||||
|
|
||||||
|
static inline pthread_t
|
||||||
|
pthread_self(void)
|
||||||
|
{
|
||||||
|
pthread_t self;
|
||||||
|
self.handle = GetCurrentThread();
|
||||||
|
return self;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
pthread_equal(pthread_t t1, pthread_t t2)
|
||||||
|
{
|
||||||
|
return t1.handle == t2.handle;
|
||||||
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#include_next <pthread.h>
|
#include_next <pthread.h>
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user