Merge pull request #5714 from alexischr/update_bockbuild
[mono.git] / mono / utils / os-event.h
1 /**
2  * \file
3  */
4
5 #ifndef _MONO_UTILS_OS_EVENT_H_
6 #define _MONO_UTILS_OS_EVENT_H_
7
8 #include <config.h>
9 #include <glib.h>
10
11 #include "mono-os-mutex.h"
12
13 #ifndef MONO_INFINITE_WAIT
14 #define MONO_INFINITE_WAIT ((guint32) 0xFFFFFFFF)
15 #endif
16
17 #define MONO_OS_EVENT_WAIT_MAXIMUM_OBJECTS 64
18
19 typedef enum {
20         MONO_OS_EVENT_WAIT_RET_SUCCESS_0 =  0,
21         MONO_OS_EVENT_WAIT_RET_ALERTED   = -1,
22         MONO_OS_EVENT_WAIT_RET_TIMEOUT   = -2,
23 } MonoOSEventWaitRet;
24
25 typedef struct _MonoOSEvent MonoOSEvent;
26
27 typedef void (*MonoOSEventFreeCb) (MonoOSEvent*);
28
29 struct _MonoOSEvent {
30 #ifdef HOST_WIN32
31         gpointer handle;
32 #else
33         GPtrArray *conds;
34         gboolean signalled;
35 #endif
36 };
37
38 void
39 mono_os_event_init (MonoOSEvent *event, gboolean initial);
40
41 void
42 mono_os_event_destroy (MonoOSEvent *event);
43
44 void
45 mono_os_event_set (MonoOSEvent *event);
46
47 void
48 mono_os_event_reset (MonoOSEvent *event);
49
50 MonoOSEventWaitRet
51 mono_os_event_wait_one (MonoOSEvent *event, guint32 timeout, gboolean alertable);
52
53 MonoOSEventWaitRet
54 mono_os_event_wait_multiple (MonoOSEvent **events, gsize nevents, gboolean waitall, guint32 timeout, gboolean alertable);
55
56 #endif /* _MONO_UTILS_OS_EVENT_H_ */