aboutsummaryrefslogtreecommitdiff
path: root/src/stable/condition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/stable/condition.cpp')
-rw-r--r--src/stable/condition.cpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/stable/condition.cpp b/src/stable/condition.cpp
new file mode 100644
index 0000000..2f55ce2
--- /dev/null
+++ b/src/stable/condition.cpp
@@ -0,0 +1,49 @@
1/*
2 * Copyright (C) 2007-2011 Xagasoft, All rights reserved.
3 *
4 * This file is part of the libbu++ library and is released under the
5 * terms of the license contained in the file LICENSE.
6 */
7
8#include <sys/time.h>
9
10#include "bu/condition.h"
11
12Bu::Condition::Condition()
13{
14 pthread_cond_init( &cond, NULL );
15}
16
17Bu::Condition::~Condition()
18{
19 pthread_cond_destroy( &cond );
20}
21
22int Bu::Condition::wait()
23{
24 return pthread_cond_wait( &cond, &mutex );
25}
26
27int Bu::Condition::wait( int nSec, int nUSec )
28{
29 struct timeval now;
30 struct timespec timeout;
31 struct timezone tz;
32
33 gettimeofday( &now, &tz );
34 timeout.tv_sec = now.tv_sec + nSec + ((now.tv_usec + nUSec)/1000000);
35 timeout.tv_nsec = ((now.tv_usec + nUSec)%1000000)*1000;
36
37 return pthread_cond_timedwait( &cond, &mutex, &timeout );
38}
39
40int Bu::Condition::signal()
41{
42 return pthread_cond_signal( &cond );
43}
44
45int Bu::Condition::broadcast()
46{
47 return pthread_cond_broadcast( &cond );
48}
49