PCMThread_impl.h

Go to the documentation of this file.
00001 
00002 //
00003 // This source file is a part of ParCompMark
00004 // Parallel Compositing Benchmark Framework
00005 //
00006 // for latest info see http://parcompmark.sourceforge.net
00007 
00008 //
00009 // Copyright (C) 2006 IT2 ParCompMark Dev. Team
00010 // 
00011 // This program is free software; you can redistribute it and/or
00012 // modify it under the terms of the GNU General Public License
00013 // as published by the Free Software Foundation; either version 2
00014 // of the License, or (at your option) any later version.
00015 // 
00016 // This program is distributed in the hope that it will be useful,
00017 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00018 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00019 // GNU General Public License for more details.
00020 // 
00021 // You should have received a copy of the GNU General Public License
00022 // along with this program; if not, write to the Free Software
00023 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00024 
00027 
00028  //
00029  // Getters & setters
00030  //
00031 
00032 inline const std::string & Thread::getThreadName() const
00033 {
00034   return mThreadName;
00035 }
00036 
00037  /*-------------------------------------------------------------------------*/
00038 
00039 inline const Thread::BoolPointer & Thread::getWait() const
00040 {
00041   return mWait;
00042 }
00043 
00044  /*-------------------------------------------------------------------------*/
00045 
00046 inline const bool & Thread::getStopRequested() const
00047 {
00048   return mStopRequested;
00049 }
00050 
00051  /*-------------------------------------------------------------------------*/
00052 
00053 inline const bool & Thread::getJoinable() const
00054 {
00055   return mJoinable;
00056 }
00057 
00058  /*-------------------------------------------------------------------------*/
00059 
00060 inline const bool & Thread::getWaitThread() const
00061 {
00062   return mWaitThread;
00063 }
00064 
00065  /*-------------------------------------------------------------------------*/
00066 
00067 inline const bool & Thread::getRunning() const
00068 {
00069   return mRunning;
00070 }
00071 
00072  /*-------------------------------------------------------------------------*/
00073 
00074 inline const u32 & Thread::getCurrentFPS() const
00075 {
00076   return mCurrentFPS;
00077 }
00078 
00079  /*-------------------------------------------------------------------------*/
00080 
00081 inline const u32 & Thread::getExpectedFPS() const
00082 {
00083   return mExpectedFPS;
00084 }
00085 
00086  /*-------------------------------------------------------------------------*/
00087 
00088 inline const u32 & Thread::getIterationNumber() const
00089 {
00090   return mIterationNumber;
00091 }
00092 
00093  /*-------------------------------------------------------------------------*/
00094 
00095  //
00096  // Class methods
00097  //
00098 
00099 inline void Thread::yield()
00100 {
00101   sched_yield();
00102 }
00103 
00104  /*----------------------------------------------------------------------*/
00105 
00106 inline Real Thread::getUSTime()
00107 {
00108   struct timeval tv;
00109   struct timezone tz;
00110 
00111   gettimeofday(&tv, &tz);
00112   return tv.tv_sec * 1000.0 * 1000.0 + tv.tv_usec;
00113 }
00114 
00115  /*----------------------------------------------------------------------*/
00116 
00117  //
00118  // Methods
00119  //
00120 
00121 inline bool Thread::iteration()
00122 {
00123   double usStart,
00124         usEnd;
00125 
00126   usStart = Thread::getUSTime();
00127   //usleep(sleepTime);
00128 
00129   // Execute task
00130   task();
00131 
00132   // Calculate fps
00133   usEnd = Thread::getUSTime();
00134   mCurrentFPS = (u32) (1000.0 * 1000.0 / (usEnd - usStart));
00135 
00136   //differenceFPS = mExpectedFPS - mCurrentFPS;
00137 
00145   // Yield the thread
00146   yield();
00147 
00148   // Test stop flag
00149   if(mStopRequested)
00150   {
00151         mStopRequested = false;
00152         return true;
00153   }
00154 
00155   return false;
00156 }
00157 
00158  /*----------------------------------------------------------------------*/