UniSet  1.4.0
OmniThreadCreator.h
См. документацию.
00001 /* This file is part of the UniSet project
00002  * Copyright (c) 2002 Free Software Foundation, Inc.
00003  * Copyright (c) 2002 Pavel Vainerman
00004  *
00005  * This program is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (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 02111-1307, USA.
00018  */
00019 // --------------------------------------------------------------------------
00024 // -------------------------------------------------------------------------- 
00025 #ifndef OmniThreadCreator_h_
00026 #define OmniThreadCreator_h_
00027 //---------------------------------------------------------------------------
00028 #include <omnithread.h>
00029 //----------------------------------------------------------------------------
00089 //----------------------------------------------------------------------------------------
00090 template<class ThreadMaster>
00091 class OmniThreadCreator:
00092     public omni_thread
00093 {
00094     public:
00095     
00097         typedef void(ThreadMaster::* Action)(void*);    
00098 
00099         OmniThreadCreator( ThreadMaster* m, Action a, bool undetached=false );
00100         ~OmniThreadCreator(){};
00101 
00102     protected:
00103         void* run_undetached(void *x)
00104         {
00105             if(m)
00106                 (m->*act)(x);
00107                 
00108             return (void*)0;
00109         }
00110         
00111         virtual void run(void* arg)
00112         {
00113             if(m)
00114                 (m->*act)(arg);
00115         }
00116 
00117     private:
00118         OmniThreadCreator();
00119         ThreadMaster* m;
00120         Action act;
00121 };
00122 
00123 //----------------------------------------------------------------------------------------
00124 template <class ThreadMaster>
00125 OmniThreadCreator<ThreadMaster>::OmniThreadCreator( ThreadMaster* m, Action a, bool undetach  ):
00126     omni_thread(),
00127     m(m),
00128     act(a)
00129 {
00130     if(undetach)
00131         start_undetached();
00132 }
00133 //----------------------------------------------------------------------------------------
00134 
00135 template <class ThreadMaster>
00136 OmniThreadCreator<ThreadMaster>::OmniThreadCreator():
00137     m(0),
00138     act(0)
00139 {
00140 }
00141 //----------------------------------------------------------------------------------------
00142 
00143 #endif // OmniThreadCreator_h_