00001 /* 00002 * Copyright (C) 2009, Edmundo Albuquerque de Souza e Silva. 00003 * 00004 * This file may be distributed under the terms of the Q Public License 00005 * as defined by Trolltech AS of Norway and appearing in the file 00006 * LICENSE.QPL included in the packaging of this file. 00007 * 00008 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 00009 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00010 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 00011 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 00012 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00013 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 00014 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 * 00016 */ 00017 00018 #include "RioTimer.h" 00019 00020 /////////////////////////////////////////////////////// 00021 // 00022 // Constructor 00023 // 00024 /////////////////////////////////////////////////////// 00025 CRioTimer::CRioTimer( void ) 00026 { 00027 Reset( ); 00028 } 00029 00030 /////////////////////////////////////////////////////// 00031 // 00032 // Resets the timer 00033 // 00034 /////////////////////////////////////////////////////// 00035 void CRioTimer::Reset( void ) 00036 { 00037 total_time.tv_sec = 0; 00038 total_time.tv_usec = 0; 00039 } 00040 00041 /////////////////////////////////////////////////////// 00042 // 00043 // Starts the timer 00044 // 00045 /////////////////////////////////////////////////////// 00046 void CRioTimer::Start( void ) 00047 { 00048 gettimeofday( &start_time, 0x0 ); 00049 } 00050 00051 /////////////////////////////////////////////////////// 00052 // 00053 // Stops the timer 00054 // 00055 /////////////////////////////////////////////////////// 00056 void CRioTimer::Stop( void ) 00057 { 00058 struct timeval stop_time; 00059 gettimeofday( &stop_time, 0x0 ); 00060 if( stop_time.tv_usec < start_time.tv_usec ) 00061 { 00062 stop_time.tv_sec--; 00063 stop_time.tv_usec += 1000000; 00064 } 00065 total_time.tv_usec += stop_time.tv_usec-start_time.tv_usec; 00066 total_time.tv_sec += stop_time.tv_sec-start_time.tv_sec; 00067 while( total_time.tv_usec > 1000000 ) 00068 { 00069 total_time.tv_sec++; 00070 total_time.tv_usec -= 1000000; 00071 } 00072 } 00073 00074 /////////////////////////////////////////////////////// 00075 // 00076 // Get the timer value 00077 // 00078 /////////////////////////////////////////////////////// 00079 int CRioTimer::Get( void ) 00080 { 00081 return (total_time.tv_sec * 1000000) + total_time.tv_usec; 00082 }