0%

【C/C++】精确系统计时:秒,毫秒,微秒

对于秒/毫秒级计时,我们可以使用其自带库函数。在头文件time.h中,clock() 函数返回从 开启这个程序进程 到 程序中调用clock()函数 时之间的CPU时钟计时单元数,返回单位是毫秒。另外,系统还定义了一个符号常量CLOCKS_PER_SEC。该常量等于每秒钟包括的系统时间单位数。因此,除以这个单位数,就可以得到秒数。time.h中将clock_t作为clock()作为clock()返回类型的别名。

对于微秒级计时,我们可以使用windows.h中的库函数QueryPerformanceCounter()。这个函数返回高精确度性能计数器的值,它可以以微妙为单位计时。由于该函数的精确计时的最小单位是与系统有关的,所以我们必须使用QueryPerformanceFrequency() 查询系统以得到QueryPerformanceCounter()返回的嘀哒声的频率,即返回每秒嘀哒声的个数。


下面具体举例说明:

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
#include <iostream>
#include <time.h>
#include <Windows.h>

using namespace std;

//---------秒级计时----------//
//void main()
//{
// clock_t start, end;
// start = clock();
// Sleep(2300);
// end = clock();
// cout << (end - start)/ double(CLOCKS_PER_SEC) << " s" << endl;
//
//}

//---------毫秒级计时----------//
//void main()
//{
// clock_t start,end;
// start = clock();
// Sleep(2300);
// end = clock();
// cout << end - start << " ms" << endl;
//
//}


//---------微秒级计时----------//
void main()
{
LARGE_INTEGER cpu_freqence;
LARGE_INTEGER start;
LARGE_INTEGER end;
double run_time = 0.0;
QueryPerformanceFrequency(&cpu_freqence);
QueryPerformanceCounter(&start);
Sleep(2300);
QueryPerformanceCounter(&end);
run_time = (((end.QuadPart - start.QuadPart) * 1000.0f) / cpu_freqence.QuadPart);
cout << run_time << " ms" << endl;
}
坚持原创技术分享,您的支持将鼓励我继续创作!