OSDN Git Service

Add Patch List to Sendmail Listctrl.
[tortoisegit/TortoiseGitJp.git] / src / Utils / HighResClock.h
1 // TortoiseSVN - a Windows shell extension for easy version control\r
2 \r
3 // Copyright (C) 2007-2007 - TortoiseSVN\r
4 \r
5 // This program is free software; you can redistribute it and/or\r
6 // modify it under the terms of the GNU General Public License\r
7 // as published by the Free Software Foundation; either version 2\r
8 // of the License, or (at your option) any later version.\r
9 \r
10 // This program is distributed in the hope that it will be useful,\r
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of\r
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
13 // GNU General Public License for more details.\r
14 \r
15 // You should have received a copy of the GNU General Public License\r
16 // along with this program; if not, write to the Free Software Foundation,\r
17 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.\r
18 //\r
19 #pragma once\r
20 \r
21 ///////////////////////////////////////////////////////////////\r
22 //\r
23 // CHighResClock\r
24 //\r
25 //              high resolution clock for performance measurement.\r
26 //              Depending on the hardware it will provide µsec \r
27 //              resolution and accuracy.\r
28 //\r
29 //              May not be available on all machines.\r
30 //\r
31 ///////////////////////////////////////////////////////////////\r
32 \r
33 class CHighResClock\r
34 {\r
35 private:\r
36 \r
37         LARGE_INTEGER start;\r
38         LARGE_INTEGER taken;\r
39 \r
40 public:\r
41 \r
42         // construction (starts measurement) / destruction\r
43 \r
44         CHighResClock() \r
45         {\r
46                 taken.QuadPart = 0;\r
47                 Start();\r
48         }\r
49 \r
50         ~CHighResClock()\r
51         {\r
52         }\r
53 \r
54         // (re-start)\r
55 \r
56         void Start()\r
57         {\r
58                 QueryPerformanceCounter(&start);\r
59         }\r
60 \r
61         // set "taken" to time since last Start()\r
62 \r
63         void Stop()\r
64         {\r
65                 QueryPerformanceCounter(&taken);\r
66                 taken.QuadPart -= start.QuadPart;\r
67         }\r
68 \r
69         // time in microseconds between last Start() and last Stop()\r
70 \r
71         DWORD GetMusecsTaken() const\r
72         {\r
73                 LARGE_INTEGER frequency;\r
74                 QueryPerformanceFrequency(&frequency);\r
75                 return (DWORD)((taken.QuadPart * 1000000) / frequency.QuadPart);\r
76         }\r
77 };\r