aboutsummaryrefslogtreecommitdiff
path: root/src/shared/Mthread.h
blob: d0ac6deb43c3da2760cbd72887df66b54390c26d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#ifndef MTHREAD_H
#define MTHREAD_H

#include "Base.h"
#ifndef WIN32
#include <pthread.h>
#else
#include <windows.h>
//#include "Process.h"
#define WIN32_THREAD_STACK_SIZE 0x10000
#endif

enum ThreadPriority
{
    IDLE,
    LOWER,
    LOW,
    NORMAL,
    HIGH,
    HIGHER,
    REALTIME
};

class MThread: public Base
{
    public:
        static MThread *Start (void (*routine) (void *arg), void *arg);
        MThread ();
        ~MThread ();
        bool SetPriority (ThreadPriority prio);

        void (*routine) (void *arg);
        void *arg;

    #ifdef WIN32
        HANDLE th;
        ULONG id;
    #else
        pthread_t tid;
    #endif

};

class MMutex :  public Base
{
    public:

    #ifdef WIN32
        HANDLE sem;
    #else
        pthread_mutex_t mutex;
        static pthread_mutexattr_t attr;
        static int attr_refcount;
    #endif
        static MMutex *Create ();
        MMutex ();
        virtual ~MMutex ();
        virtual bool Lock ();
        virtual bool TryLock ();
        virtual void Unlock ();
};
#endif                                                      // MTHREAD_H