From 2d06c5bbadb39343929cc8185708a5a7eeb684d9 Mon Sep 17 00:00:00 2001 From: Chris Frey Date: Fri, 6 Jan 2012 01:36:13 -0500 Subject: [PATCH] desktop: added EasyCondition.h --- desktop/src/EasyCondition.h | 69 +++++++++++++++++++++++++++++++++++++++++++++ desktop/src/Makefile.am | 1 + 2 files changed, 70 insertions(+) create mode 100644 desktop/src/EasyCondition.h diff --git a/desktop/src/EasyCondition.h b/desktop/src/EasyCondition.h new file mode 100644 index 00000000..e0570f00 --- /dev/null +++ b/desktop/src/EasyCondition.h @@ -0,0 +1,69 @@ +/// +/// \file EasyCondition.h +/// Wrapper thread around wxMutex and wxCondition, to make +/// simple waits easy and safe. Also an RAII scope signaler. +/// + +/* + Copyright (C) 2012, Net Direct Inc. (http://www.netdirect.ca/) + + 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. + + 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 in the COPYING file at the + root directory of this project for more details. +*/ + +#ifndef __BARRYDESKTOP_EASYCONDITION_H__ +#define __BARRYDESKTOP_EASYCONDITION_H__ + +#include + +class EasyCondition +{ + wxMutex m_mutex; + wxCondition m_condition; + +public: + EasyCondition() + : m_condition(m_mutex) + { + m_mutex.Lock(); + } + + void Wait() + { + m_condition.Wait(); + } + + void Signal() + { + wxMutexLocker lock(m_mutex); + m_condition.Broadcast(); + } +}; + +class ScopeSignaler +{ + EasyCondition &m_condition; + +public: + explicit ScopeSignaler(EasyCondition &cond) + : m_condition(cond) + { + } + + ~ScopeSignaler() + { + m_condition.Signal(); + } +}; + +#endif + diff --git a/desktop/src/Makefile.am b/desktop/src/Makefile.am index a03701d6..7fb8a34f 100644 --- a/desktop/src/Makefile.am +++ b/desktop/src/Makefile.am @@ -60,6 +60,7 @@ libosyncwrap_la_LDFLAGS = -ldl -version-info ${LIB_OSYNCWRAP_VERSION} barrydesktop_SOURCES = \ barrydesktop.cc barrydesktop.h \ ipc.h optout.h \ + EasyCondition.h \ windowids.h \ util.cc util.h \ StringSync.cc StringSync.h \ -- 2.11.4.GIT