Imported Upstream version 0.9.0
[deb_shairplay.git] / src / lib / threads.h
CommitLineData
15c988f7
JB
1/**
2 * Copyright (C) 2011-2012 Juho Vähä-Herttua
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Lesser General Public License for more details.
13 */
14
15#ifndef THREADS_H
16#define THREADS_H
17
18#if defined(WIN32)
19#include <windows.h>
20
21#define sleepms(x) Sleep(x)
22
23typedef HANDLE thread_handle_t;
24
25#define THREAD_RETVAL DWORD WINAPI
26#define THREAD_CREATE(handle, func, arg) \
27 handle = CreateThread(NULL, 0, func, arg, 0, NULL)
28#define THREAD_JOIN(handle) do { WaitForSingleObject(handle, INFINITE); CloseHandle(handle); } while(0)
29
30typedef HANDLE mutex_handle_t;
31
32#define MUTEX_CREATE(handle) handle = CreateMutex(NULL, FALSE, NULL)
33#define MUTEX_LOCK(handle) WaitForSingleObject(handle, INFINITE)
34#define MUTEX_UNLOCK(handle) ReleaseMutex(handle)
35#define MUTEX_DESTROY(handle) CloseHandle(handle)
36
37#else /* Use pthread library */
38
39#include <pthread.h>
40#include <unistd.h>
41
42#define sleepms(x) usleep((x)*1000)
43
44typedef pthread_t thread_handle_t;
45
46#define THREAD_RETVAL void *
47#define THREAD_CREATE(handle, func, arg) \
48 if (pthread_create(&(handle), NULL, func, arg)) handle = 0
49#define THREAD_JOIN(handle) pthread_join(handle, NULL)
50
51typedef pthread_mutex_t mutex_handle_t;
52
53#define MUTEX_CREATE(handle) pthread_mutex_init(&(handle), NULL)
54#define MUTEX_LOCK(handle) pthread_mutex_lock(&(handle))
55#define MUTEX_UNLOCK(handle) pthread_mutex_unlock(&(handle))
56#define MUTEX_DESTROY(handle) pthread_mutex_destroy(&(handle))
57
58#endif
59
60#endif /* THREADS_H */