home *** CD-ROM | disk | FTP | other *** search
/ Freelog 125 / Freelog_MarsAvril2015_No125.iso / Multimedia / AVStoDVD / AVStoDVD_280_Install.exe / AVSMeter / source / timer.h < prev    next >
C/C++ Source or Header  |  2014-10-10  |  3KB  |  139 lines

  1. // This program is free software; you can redistribute it and/or modify
  2. // it under the terms of the GNU General Public License as published by
  3. // the Free Software Foundation; either version 2 of the License, or
  4. // (at your option) any later version.
  5.  
  6. #ifndef _TIMER_H
  7. #define _TIMER_H
  8.  
  9. #include "stdafx.h"
  10.  
  11. using namespace std;
  12.  
  13. class CTimer
  14. {
  15. public:
  16.     CTimer();
  17.     virtual      ~CTimer();
  18.     double       GetTimer();
  19.     double       GetMMTimer();
  20.     BOOL         TestTimer();
  21.     string       FormatTimeString(__int64 i_milliseconds, BOOL b_rightaligned);
  22.     string       StrFormat(const char *fmt, ...);
  23. };
  24.  
  25. CTimer::CTimer()
  26. {
  27. }
  28.  
  29. CTimer::~CTimer()
  30. {
  31. }
  32.  
  33.  
  34. BOOL CTimer::TestTimer()
  35. {
  36.     LARGE_INTEGER liPerfCounter = {0,0};
  37.     LARGE_INTEGER liPerfFreq = {0,0};
  38.  
  39.     if ((::QueryPerformanceFrequency(&liPerfFreq) == 0) || (::QueryPerformanceCounter(&liPerfCounter) == 0))
  40.         return FALSE;
  41.  
  42.     TIMECAPS tc;
  43.     if (timeGetDevCaps(&tc, sizeof(TIMECAPS)) != TIMERR_NOERROR) 
  44.         return FALSE;
  45.  
  46.     double start = GetTimer();
  47.     ::Sleep(1000);
  48.     double dtesttime = GetTimer() - start;
  49.         
  50.     if ((dtesttime > 0.7) && (dtesttime < 1.3))
  51.         return TRUE;
  52.  
  53.     return FALSE;
  54. }
  55.  
  56.  
  57. double CTimer::GetTimer()
  58. {
  59.     LARGE_INTEGER liPerfCounter = {0,0};
  60.     LARGE_INTEGER liPerfFreq = {0,0};
  61.  
  62.     DWORD_PTR dwpOldMask = ::SetThreadAffinityMask(::GetCurrentThread(), 0x01);
  63.     Sleep(0);
  64.  
  65.     ::QueryPerformanceFrequency(&liPerfFreq);
  66.     ::QueryPerformanceCounter(&liPerfCounter);
  67.  
  68.     ::SetThreadAffinityMask(::GetCurrentThread(), dwpOldMask);
  69.     Sleep(0);
  70.  
  71.     return (double)liPerfCounter.QuadPart / (double)liPerfFreq.QuadPart;
  72. }
  73.  
  74.  
  75. double CTimer::GetMMTimer()
  76. {
  77.     return (double)timeGetTime() / 1000.0;
  78. }
  79.  
  80.  
  81. string CTimer::FormatTimeString(__int64 i_milliseconds, BOOL b_rightaligned)
  82. {
  83.     string sTime = "";
  84.     unsigned int hours = (unsigned int)(i_milliseconds / 3600000);
  85.     unsigned int minutes = (unsigned int)(i_milliseconds / 60000) % 60;
  86.     unsigned int seconds = (unsigned int)(i_milliseconds / 1000) % 60;
  87.     unsigned int milliseconds = (unsigned int)i_milliseconds % 1000;
  88.  
  89.     if (hours < 100)
  90.         sTime = StrFormat("   %02d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds);
  91.     else
  92.         sTime = StrFormat("%5d:%02d:%02d.%03d", hours, minutes, seconds, milliseconds);
  93.  
  94.     if (!b_rightaligned)
  95.         sTime.erase(0, sTime.find_first_not_of(" "));
  96.  
  97.     return sTime;
  98. }
  99.  
  100.  
  101. string CTimer::StrFormat(const char *fmt, ...)
  102. {
  103.     if (!fmt)    return "";
  104.  
  105.     #define MAX_LEN 2048
  106.     va_list args;
  107.     va_start(args, fmt);
  108.     unsigned int length = 256;
  109.     char *buffer = NULL;
  110.     int result = -1;
  111.  
  112.     while (result == -1)
  113.     {
  114.         if (buffer)
  115.             delete [] buffer;
  116.  
  117.         buffer = new char [length];
  118.         memset(buffer, ' ', sizeof(buffer));
  119.         result = _vsnprintf(buffer, length, fmt, args);
  120.         length *= 2;
  121.         if (length > MAX_LEN)
  122.         {
  123.             delete [] buffer;
  124.             va_end(args);
  125.             return "";
  126.         }
  127.     }
  128.  
  129.     string str(buffer);
  130.     delete [] buffer;
  131.     va_end(args);
  132.  
  133.     return str;
  134. }
  135.  
  136.  
  137. #endif //_TIMER_H
  138.  
  139.