1 /*
2  * Copyright (C) 2012 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 /*
18  *  Encapsulate a condition variable for thread synchronization.
19  */
20 
21 #pragma once
22 #include <pthread.h>
23 
24 #include "Mutex.h"
25 
26 class CondVar {
27  public:
28   /*******************************************************************************
29   **
30   ** Function:        CondVar
31   **
32   ** Description:     Initialize member variables.
33   **
34   ** Returns:         None.
35   **
36   *******************************************************************************/
37   CondVar();
38 
39   /*******************************************************************************
40   **
41   ** Function:        ~CondVar
42   **
43   ** Description:     Cleanup all resources.
44   **
45   ** Returns:         None.
46   **
47   *******************************************************************************/
48   ~CondVar();
49 
50   /*******************************************************************************
51   **
52   ** Function:        wait
53   **
54   ** Description:     Block the caller and wait for a condition.
55   **
56   ** Returns:         None.
57   **
58   *******************************************************************************/
59   void wait(Mutex& mutex);
60 
61   /*******************************************************************************
62   **
63   ** Function:        wait
64   **
65   ** Description:     Block the caller and wait for a condition.
66   **                  millisec: Timeout in milliseconds.
67   **
68   ** Returns:         True if wait is successful; false if timeout occurs.
69   **
70   *******************************************************************************/
71   bool wait(Mutex& mutex, long millisec);
72 
73   /*******************************************************************************
74   **
75   ** Function:        notifyOne
76   **
77   ** Description:     Unblock the waiting thread.
78   **
79   ** Returns:         None.
80   **
81   *******************************************************************************/
82   void notifyOne();
83 
84  private:
85   pthread_cond_t mCondition;
86 };
87