# BasicThread.h

Go to the documentation of this file.

    00001 /*******************************************************************\
    00002
    00003               Copyright (C) 2004 Joseph Coffland
    00004
    00005     This program is free software; you can redistribute it and/or
    00006      modify it under the terms of the GNU General Public License
    00007     as published by the Free Software Foundation; either version 2
    00008         of the License, or (at your option) any later version.
    00009
    00010    This program is distributed in the hope that it will be useful,
    00011     but WITHOUT ANY WARRANTY; without even the implied warranty of
    00012     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    00013              GNU General Public License for more details.
    00014
    00015   You should have received a copy of the GNU General Public License
    00016      along with this program; if not, write to the Free Software
    00017       Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
    00018                            02111-1307, USA.
    00019
    00020             For information regarding this software email
    00021                    jcofflan@users.sourceforge.net
    00022
    00023 \*******************************************************************/
    00024 #ifndef BASICTHREAD_H
    00025 #define BASICTHREAD_H
    00026
    00027 #include <pthread.h>
    00028 #include "BasicCondition.h"
    00029
    00030 struct BasicFunctorBase;
    00031
    00033
    00048 class BasicThread : public BasicCondition {
    00049   pthread_t thread;
    00050   pthread_attr_t attr;
    00051
    00052   BasicFunctorBase *functor;
    00053   void *(*startRoutine)(void *);
    00054   void *data;
    00055
    00056  protected:
    00057   bool shutdown;
    00058   bool running;
    00059
    00060  public:
    00061   BasicThread();
    00062   BasicThread(BasicFunctorBase *functor);
    00063   BasicThread(void *(*startRoutine)(void *));
    00064   virtual ~BasicThread();
    00065
    00066   virtual void run();
    00067   bool start();
    00068   void stop();
    00069   bool join();
    00070   bool cancel();
    00071   static void testCancel();
    00072   bool detach();
    00073
    00074   void *getData() {return data;}
    00075   void setData(void *data) {this->data = data;}
    00076
    00088   void setRunning(bool x) {running = x;}
    00089   bool isRunning() {return running;}
    00090   bool shouldShutdown();
    00091
    00092  private:
    00093   virtual void onExit();
    00094   virtual void onEntrance();
    00095   static void *starter(void *me);
    00096
    00097   void init();
    00098 };
    00099 #endif // BASICTHREAD_H