Blame examples/ClockerPlugIn/WinNtTimer.cpp

Packit 8c9aa0
// //////////////////////////////////////////////////////////////////////////
Packit 8c9aa0
// Implementation file WinNtTimer.cpp for class WinNtTimer
Packit 8c9aa0
// (c)Copyright 2000, Baptiste Lepilleur.
Packit 8c9aa0
// Created: 2002/04/19
Packit 8c9aa0
// //////////////////////////////////////////////////////////////////////////
Packit 8c9aa0
Packit 8c9aa0
#include "WinNtTimer.h"
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
/*! Returns time spent in the thread.
Packit 8c9aa0
 * @param rquadTime Receive the time spent in the thread (user+kernel time) 
Packit 8c9aa0
 *                  in unit of 100 nano-seconds.
Packit 8c9aa0
 *                  In pratice, the effective resolution is 10ms !!!
Packit 8c9aa0
 *
Packit 8c9aa0
 * @return \c true if sucess, \c false otherwise.
Packit 8c9aa0
 */
Packit 8c9aa0
static bool 
Packit 8c9aa0
GetThreadSpentTime( LONGLONG &rquadTime )
Packit 8c9aa0
{
Packit 8c9aa0
  FILETIME timeCreation;
Packit 8c9aa0
  FILETIME timeExit;
Packit 8c9aa0
  FILETIME timeKernel;
Packit 8c9aa0
  FILETIME timeUser;
Packit 8c9aa0
  if ( !::GetThreadTimes( ::GetCurrentThread(),
Packit 8c9aa0
                          &timeCreation,
Packit 8c9aa0
                          &timeExit,
Packit 8c9aa0
                          &timeKernel,
Packit 8c9aa0
                          &timeUser) )
Packit 8c9aa0
  {
Packit 8c9aa0
    rquadTime = 0;
Packit 8c9aa0
    return false;
Packit 8c9aa0
  }
Packit 8c9aa0
Packit 8c9aa0
  LARGE_INTEGER lintKernel;
Packit 8c9aa0
  lintKernel.LowPart = timeKernel.dwLowDateTime;
Packit 8c9aa0
  lintKernel.HighPart = timeKernel.dwHighDateTime;
Packit 8c9aa0
Packit 8c9aa0
  LARGE_INTEGER lintUser;
Packit 8c9aa0
  lintUser.LowPart = timeUser.dwLowDateTime;
Packit 8c9aa0
  lintUser.HighPart = timeUser.dwHighDateTime;
Packit 8c9aa0
Packit 8c9aa0
  rquadTime = lintKernel.QuadPart + lintUser.QuadPart;
Packit 8c9aa0
Packit 8c9aa0
  return true;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
WinNtTimer::start()
Packit 8c9aa0
{
Packit 8c9aa0
  m_isValid = GetThreadSpentTime( m_beginTime );
Packit 8c9aa0
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
void 
Packit 8c9aa0
WinNtTimer::finish()
Packit 8c9aa0
{
Packit 8c9aa0
  LONGLONG quadTimeEnd;
Packit 8c9aa0
  LONGLONG quadProcessedElapse;
Packit 8c9aa0
  m_isValid = m_isValid  && GetThreadSpentTime( quadTimeEnd );
Packit 8c9aa0
  if ( m_isValid )
Packit 8c9aa0
  {
Packit 8c9aa0
    quadProcessedElapse = quadTimeEnd - m_beginTime;
Packit 8c9aa0
    m_elapsedTime = double(quadProcessedElapse) / 10000000;
Packit 8c9aa0
  }
Packit 8c9aa0
  else
Packit 8c9aa0
    m_elapsedTime = -1;
Packit 8c9aa0
}
Packit 8c9aa0
Packit 8c9aa0
Packit 8c9aa0
double 
Packit 8c9aa0
WinNtTimer::elapsedTime() const
Packit 8c9aa0
{
Packit 8c9aa0
  return m_elapsedTime;
Packit 8c9aa0
}