1 /*
2  *  Copyright 2004 The WebRTC Project Authors. All rights reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10 
11 #ifndef RTC_BASE_EVENT_H_
12 #define RTC_BASE_EVENT_H_
13 
14 #include "rtc_base/constructormagic.h"
15 #if defined(WEBRTC_WIN)
16 #include "rtc_base/win32.h"  // NOLINT: consider this a system header.
17 #elif defined(WEBRTC_POSIX)
18 #include <pthread.h>
19 #else
20 #error "Must define either WEBRTC_WIN or WEBRTC_POSIX."
21 #endif
22 
23 namespace rtc {
24 
25 class Event {
26  public:
27   static const int kForever = -1;
28 
29   Event(bool manual_reset, bool initially_signaled);
30   ~Event();
31 
32   void Set();
33   void Reset();
34 
35   // Wait for the event to become signaled, for the specified number of
36   // |milliseconds|.  To wait indefinetly, pass kForever.
37   bool Wait(int milliseconds);
38 
39  private:
40 #if defined(WEBRTC_WIN)
41   HANDLE event_handle_;
42 #elif defined(WEBRTC_POSIX)
43   pthread_mutex_t event_mutex_;
44   pthread_cond_t event_cond_;
45   const bool is_manual_reset_;
46   bool event_status_;
47 #endif
48 
49   RTC_DISALLOW_IMPLICIT_CONSTRUCTORS(Event);
50 };
51 
52 }  // namespace rtc
53 
54 #endif  // RTC_BASE_EVENT_H_
55