Slave.hpp
/* This file is part of Raul.
* Copyright (C) 2007-2009 David Robillard <http://drobilla.net>
*
* Raul 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.
*
* Raul 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 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.,
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#ifndef RAUL_SLAVE_HPP
#define RAUL_SLAVE_HPP
#include <pthread.h>
#include "raul/Semaphore.hpp"
#include "raul/Thread.hpp"
namespace Raul {
class Slave : public Thread
{
public:
Slave() : _whip(0) {}
inline void whip() { _whip.post(); }
protected:
virtual void _whipped() = 0;
Semaphore _whip;
private:
inline void _run() {
while (true) {
_whip.wait();
_whipped();
}
}
};
} // namespace Raul
#endif // RAUL_SLAVE_HPP
Raul::Thread
Abstract base class for a thread.
Definition: Thread.hpp:41
Raul::Semaphore
Counting semaphore.
Definition: Semaphore.hpp:37
Raul::Slave
Thread driven by (realtime safe) signals.
Definition: Slave.hpp:35
Raul
Definition: Array.hpp:26
Raul::Semaphore::wait
void wait()
Wait until count is > 0, then decrement.
Definition: Semaphore.hpp:85
Raul::Slave::_whipped
virtual void _whipped()=0
Worker method.
Raul::Slave::whip
void whip()
Tell the slave to do whatever work it does.
Definition: Slave.hpp:41
Raul::Semaphore::post
void post()
Increment (and signal any waiters).
Definition: Semaphore.hpp:73