-
Notifications
You must be signed in to change notification settings - Fork 0
/
Condition.cpp
71 lines (60 loc) · 1.88 KB
/
Condition.cpp
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
64
65
66
67
68
69
70
71
/**
* @file Condition.cpp
* @brief Wrapper class impl for Posix Condition
* @author Divyang Patel <divyang.jp@gmail.com>
* @version 1.0
* @date 2013-04-05
*
* Copyright (C)
* 2013 - Divyang Patel <divyang.jp@gmail.com>
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* The above copyright notice and this permission notice shall be included
* in all copies of the Software.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*
*/
#include "Condition.h"
Condition::Condition()
{
pthread_cond_init(&m_cond, NULL);
}
Condition::~Condition()
{
pthread_cond_destroy(&m_cond);
}
void Condition::Wait()
{
pthread_cond_wait(&m_cond, &m_mutex);
}
int Condition::TimedWait(int ai_tSecondsToWait)
{
int nResult = 0;
struct timespec timeToWait;
struct timeval now;
gettimeofday(&now,NULL);
Utils::SecsToTimespec((now.tv_sec+ai_tSecondsToWait), timeToWait);
//timeToWait.tv_sec = now.tv_sec+ai_tSecondsToWait;
//timeToWait.tv_nsec = (now.tv_usec+ai_tSecondsToWait*1000000UL)*1000UL;
nResult = pthread_cond_timedwait(&m_cond, &m_mutex, &timeToWait);
return nResult;
}
void Condition::Signal()
{
pthread_cond_signal(&m_cond);
}
void Condition::Broadcast()
{
pthread_cond_broadcast(&m_cond);
}