diff options
Diffstat (limited to 'src/threads.hh')
| -rw-r--r-- | src/threads.hh | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/threads.hh b/src/threads.hh new file mode 100644 index 0000000..9eafe11 --- /dev/null +++ b/src/threads.hh @@ -0,0 +1,33 @@ +#ifndef TIBIA_THREADS_HH_ +#define TIBIA_THREADS_HH_ 1 + +#include "common.hh" +#include <pthread.h> + +typedef pthread_t ThreadHandle; +typedef int (ThreadFunction)(void *); + +// TODO(fusion): Probably have another way to tell whether the thread was +// successfully spawned or not? +constexpr ThreadHandle INVALID_THREAD_HANDLE = 0; + +ThreadHandle StartThread(ThreadFunction *Function, void *Argument, bool Detach); +ThreadHandle StartThread(ThreadFunction *Function, void *Argument, size_t StackSize, bool Detach); +ThreadHandle StartThread(ThreadFunction *Function, void *Argument, void *Stack, size_t StackSize, bool Detach); +int JoinThread(ThreadHandle Handle); +void DelayThread(int Seconds, int MicroSeconds); + +struct Semaphore { + Semaphore(int Value); + ~Semaphore(void); + void up(void); + void down(void); + + // DATA + // ================= + int value; + pthread_mutex_t mutex; + pthread_cond_t condition; +}; + +#endif //TIBIA_THREADS_HH_ |
