condition_variable_wrapper.h revision 4e51691e58d8d32590b03c1951cb13de4d1c4758
1/*
2 *  Copyright (c) 2011 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 WEBRTC_SYSTEM_WRAPPERS_INTERFACE_CONDITION_VARIABLE_WRAPPER_H_
12#define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_CONDITION_VARIABLE_WRAPPER_H_
13
14namespace webrtc {
15class CriticalSectionWrapper;
16
17class ConditionVariableWrapper
18{
19public:
20    // Factory method, constructor disabled.
21    static ConditionVariableWrapper* CreateConditionVariable();
22
23    virtual ~ConditionVariableWrapper() {}
24
25    // Calling thread will atomically release critSect and wait until next
26    // some other thread calls Wake() or WakeAll().
27    virtual void SleepCS(CriticalSectionWrapper& critSect) = 0;
28
29    // Same as above but with a timeout.
30    virtual bool SleepCS(CriticalSectionWrapper& critSect,
31                         unsigned long maxTimeInMS) = 0;
32
33    // Wakes one thread calling SleepCS().
34    virtual void Wake() = 0;
35
36    // Wakes all threads calling SleepCS().
37    virtual void WakeAll() = 0;
38};
39} // namespace webrtc
40
41#endif // WEBRTC_SYSTEM_WRAPPERS_INTERFACE_CONDITION_VARIABLE_WRAPPER_H_
42