/*
* Copyright (C) 2015 by Multi-Tech Systems
*
* This file is part of libmts.
*
* libmts is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* libmts 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with libmts. If not, see .
*
*/
/*! \file MTS_SignalThread.h
\brief An abstract worker thread
\date 01MAR13
\author Mike Fiore
A platform independent thread that executes a task when it is signaled.
*/
#ifndef _MTS_SIGNAL_THREAD_H_
#define _MTS_SIGNAL_THREAD_H_
#include
#include
#include
#include
namespace MTS {
//! An abstract worker thread
/*!
A platform independent worker thread class
*/
class SignalThread: public Thread {
public:
~SignalThread(); //!< Destructs the thread
bool isExecuting() const; //!< Returns true if the thread is currently running executing the execute() function
void signal(); //!< Instructs the thread to run the execute() function
protected:
explicit SignalThread(const std::string& name); //!< Creates the thread
explicit SignalThread(const std::string& name, uint32_t waitMillis); //!< Creates the thread
private:
void run(); //!< Abstracts the running of the thread
virtual void execute() = 0; //!< main() of the thread which is executed each time signal() is called
void init(); //!< Startup code common to all constructors
AutoPtr m_apStateLock; //!< Condition Lock
AutoPtr m_apConditionLock; //!< Condition Lock
AutoPtr m_apCondition; //!< Condition for signaling and waiting
bool m_bShouldExecute; //!< Should execute flag
bool m_bCurrentlyExecuting; //!< Currently executing flag
uint32_t m_ui32WaitMillis; //!< Max time to wait on condition before checking for shutdown
};
}
#endif