Blame examples/ClockerPlugIn/WinNtTimer.cpp

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