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 |
}
|