JackWaitThreadedDriver.h
/*
Copyright (C) 2001 Paul Davis
Copyright (C) 2004-2008 Grame
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 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
#ifndef __JackWaitThreadedDriver__
#define __JackWaitThreadedDriver__
#include "JackThreadedDriver.h"
#include "JackTimedDriver.h"
namespace Jack
{
class SERVER_EXPORT JackWaitThreadedDriver : public JackThreadedDriver
{
private:
struct JackDriverStarter : public JackRunnableInterface
{
JackDriver* fDriver;
JackThread fThread;
volatile bool fRunning;
JackDriverStarter(JackDriver* driver)
:fDriver(driver), fThread(this), fRunning(false)
{}
~JackDriverStarter()
{
fThread.Kill();
}
int Start()
{
fRunning = false;
return fThread.Start();
}
// JackRunnableInterface interface
bool Execute()
{
// Blocks until decorated driver is started (that is when it's Initialize method returns).
if (fDriver->Initialize()) {
fRunning = true;
} else {
jack_error("Initing net driver fails...");
}
return false;
}
};
JackDriverStarter fStarter;
public:
JackWaitThreadedDriver(JackDriver* net_driver)
: JackThreadedDriver(net_driver), fStarter(net_driver)
{}
virtual ~JackWaitThreadedDriver()
{}
// JackRunnableInterface interface
bool Init();
bool Execute();
protected:
virtual bool ExecuteReal();
};
} // end of namespace
#endif
Jack::JackThreadedDriver
The base class for threaded drivers using a "decorator" pattern. Threaded drivers are used with block...
Definition: JackThreadedDriver.h:34
Jack
Definition: JackAC3Encoder.cpp:30
Jack::JackWaitThreadedDriver
Wrapper for a restartable threaded driver (e.g. JackNetDriver).
Definition: JackWaitThreadedDriver.h:38
Jack::JackRunnableInterface
The base class for runnable objects, that have an Init and Execute method to be called in a threa...
Definition: JackThread.h:34
jack_error
SERVER_EXPORT void jack_error(const char *fmt,...)
Definition: JackError.cpp:92
Jack::JackDriver
Definition: JackDriver.h:127
Jack::JackMachThread
Darwin threads. Real-time threads are actually "time constraint" threads.
Definition: JackMachThread.h:92