QPerformanceTimer.h
上传用户:shlanyl88
上传日期:2013-03-14
资源大小:147k
文件大小:2k
源码类别:

3D图形编程

开发平台:

Visual C++

  1. /********************************************************************************
  2. Copyright (C) 2004 Sjaak Priester
  3. This is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU General Public License as published by
  5. the Free Software Foundation; either version 2 of the License, or
  6. (at your option) any later version.
  7. This file is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10. GNU General Public License for more details.
  11. You should have received a copy of the GNU General Public License
  12. along with Tinter; if not, write to the Free Software
  13. Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  14. ********************************************************************************/
  15. // QPerformanceTimer
  16. // Class to measure performance time
  17. //
  18. // Usage: simply define a QPerformanceTimer variable in a C++ block.
  19. // At construction, it measures the start time.
  20. // At destruction, it measures the stop time. It calculates the difference
  21. // and puts the result (in milliseconds) in the associated int.
  22. // In other words: this class measures and records its own lifetime.
  23. // If the output is set to -1, it's an indication of overflow, but this
  24. // will only occur after more than three weeks (!).
  25. //
  26. // Example:
  27. //
  28. //
  29. // SomeFunction()
  30. // {
  31. // ... some code...
  32. //
  33. // int elapsedTime;
  34. // { // start of the block we want to monitor
  35. // QPerformanceTimer(elapsedTime);
  36. //
  37. // ... some lengthy process...
  38. //
  39. // } // end of block, elapsed time is recorded in elapsedTime
  40. //
  41. // printf("Time = %d milliseconds", elapsedTime);
  42. // }
  43. //
  44. // Version 1.0 (C) 2004, Sjaak Priester, Amsterdam.
  45. // mailto:sjaak@sjaakpriester.nl
  46. #pragma once
  47. class QPerformanceTimer
  48. {
  49. public:
  50. QPerformanceTimer(int& MilliSeconds)
  51. : m_Output(MilliSeconds)
  52. {
  53. ::QueryPerformanceCounter(&m_Start);
  54. }
  55. ~QPerformanceTimer(void)
  56. {
  57. LARGE_INTEGER stop;
  58. LARGE_INTEGER freq;
  59. ::QueryPerformanceCounter(&stop);
  60. ::QueryPerformanceFrequency(&freq);
  61. stop.QuadPart -= m_Start.QuadPart;
  62. stop.QuadPart *= 1000;
  63. stop.QuadPart /= freq.QuadPart;
  64. if (stop.HighPart != 0) m_Output = -1;
  65. else m_Output = stop.LowPart;
  66. }
  67. protected:
  68. LARGE_INTEGER m_Start;
  69. int& m_Output;
  70. };