-
Notifications
You must be signed in to change notification settings - Fork 0
/
TimeCount.cpp
140 lines (117 loc) · 3.27 KB
/
TimeCount.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
//*********************************************************
// 文件名:TimeCount.cpp
// 作 者:hek_win7
// 日 期:2011-08-10
// 目 的:精确计时类 ——实现文件
//*********************************************************
#include "TimeCount.h"
#ifdef Q_OS_WIN
LARGE_INTEGER CTimeCount::m_startTime = {0};
LARGE_INTEGER CTimeCount::m_frequency = {0};
LARGE_INTEGER CTimeCount::m_endTime = {0};
double CTimeCount::m_fUseTime = 0.0f;
double CTimeCount::m_fTotalTime = 0.0f;
#else
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <inttypes.h>
#include <sys/time.h>
unsigned long CTimeCount::m_start_time_msec = 0;
unsigned long CTimeCount::m_end_time_msec = 0;
unsigned long CTimeCount::m_frequency_msec = 0;
unsigned long CTimeCount::m_use_time_msec = 0;
unsigned long CTimeCount::m_total_time_msec = 0;
#endif
CTimeCount::CTimeCount(void)
{
}
CTimeCount::~CTimeCount(void)
{
}
// 设置开始时间
void CTimeCount::SetStartTime()
{
#ifdef Q_OS_WIN
QueryPerformanceFrequency(&m_frequency);
// 记录启动时间
QueryPerformanceCounter(&m_startTime);
CString strStartTime;
SYSTEMTIME sys;
GetLocalTime( &sys );
strStartTime.Format(_T("CTimeCount::SetStartTime() -- 开始操作时间:%02d:%02d:%02d.%03d"), sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds);
OutputDebugString(strStartTime);
#else
struct timeval cur_time;
gettimeofday(&cur_time, NULL);
m_start_time_msec = (cur_time.tv_sec * 1000) + (cur_time.tv_usec / 1000);
#endif
}
// 设置结束时间
void CTimeCount::SetEndTime()
{
#ifdef Q_OS_WIN
// 记录结束时间
QueryPerformanceCounter(&m_endTime);
CString strEndTime;
SYSTEMTIME sys;
GetLocalTime( &sys );
strEndTime.Format(_T("CTimeCount::SetEndTime() -- 结束操作时间: %02d:%02d:%02d.%03d"), sys.wHour,sys.wMinute,sys.wSecond,sys.wMilliseconds);
OutputDebugString(strEndTime);
#else
struct timeval cur_time;
gettimeofday(&cur_time, NULL);
m_end_time_msec = (cur_time.tv_sec * 1000) + (cur_time.tv_usec / 1000);
#endif
}
// 获取用时
// bool bAccumulate -- [in] 是否累加时间
double CTimeCount::GetUseTime(bool bAccumulate/* = false*/)
{
#ifdef Q_OS_WIN
// 计算用时
double dInterval = (double)(m_endTime.QuadPart - m_startTime.QuadPart);
m_fUseTime = dInterval / (double)m_frequency.QuadPart * 1000.0;
CString strUseTime;
strUseTime.Format(_T("CTimeCount::GetUseTime() -- 本次操作用时: %.3f ms"), m_fUseTime);
OutputDebugString(strUseTime);
if(bAccumulate)
{
m_fTotalTime += m_fUseTime;
}
return m_fUseTime;
#else
m_frequency_msec = m_end_time_msec - m_start_time_msec;
m_use_time_msec = m_frequency_msec;
printf("本次操作用时: %ld ms", m_use_time_msec);
if(bAccumulate)
{
m_total_time_msec += m_use_time_msec;
}
#endif
return (double)m_use_time_msec;
}
// 获取总时间
double CTimeCount::GetTotalTime()
{
#ifdef Q_OS_WIN
CString strTotalTime;
strTotalTime.Format(_T("CTimeCount::GetTotalTime() -- 总计用时: %.3f ms"), m_fTotalTime);
OutputDebugString(strTotalTime);
return m_fTotalTime;
#else
printf("总计用时:%ld\n ms", m_total_time_msec);
return (double)m_total_time_msec;
#endif
}
// 所有时间重置
void CTimeCount::ResetTime()
{
#ifdef Q_OS_WIN
m_fUseTime = 0.0f;
m_fTotalTime = 0.0f;
#else
m_use_time_msec = 0;
m_total_time_msec = 0;
#endif
}