gpt4 book ai didi

c - 如何测量 C 中的时间间隔?

转载 作者:太空狗 更新时间:2023-10-29 16:19:17 32 4
gpt4 key购买 nike

我想用 C 来测量时间,但我很难搞清楚,我想要的只是这样的东西:

  • 开始计时
  • 运行一个方法
  • 停止计时
  • 报告所用时间(至少要达到微观准确度)

如有任何帮助,我们将不胜感激。

(我在windows下用mingw编译)

最佳答案

提供 1 微秒分辨率的高分辨率计时器是系统特定的,因此您必须在不同的操作系统平台上使用不同的方法来实现它。您可能有兴趣查看以下文章,该文章基于以下描述的功能实现了一个跨平台的 C++ 计时器类:

  • [Song Ho Ahn - 高分辨率计时器][1]

window

Windows API 提供了非常高分辨率的计时器函数:QueryPerformanceCounter(),它返回当前经过的滴答声,以及 QueryPerformanceFrequency(),它返回每个滴答声的数量第二。

例子:

#include <stdio.h>
#include <windows.h> // for Windows APIs

int main(void)
{
LARGE_INTEGER frequency; // ticks per second
LARGE_INTEGER t1, t2; // ticks
double elapsedTime;

// get ticks per second
QueryPerformanceFrequency(&frequency);

// start timer
QueryPerformanceCounter(&t1);

// do something
// ...

// stop timer
QueryPerformanceCounter(&t2);

// compute and print the elapsed time in millisec
elapsedTime = (t2.QuadPart - t1.QuadPart) * 1000.0 / frequency.QuadPart;
printf("%f ms.\n", elapsedTime);
}

Linux、Unix 和 Mac

对于基于 Unix 或 Linux 的系统,您可以使用 gettimeofday()。该函数在“sys/time.h”中声明。

例子:

#include <stdio.h>
#include <sys/time.h> // for gettimeofday()

int main(void)
{
struct timeval t1, t2;
double elapsedTime;

// start timer
gettimeofday(&t1, NULL);

// do something
// ...

// stop timer
gettimeofday(&t2, NULL);

// compute and print the elapsed time in millisec
elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0; // sec to ms
elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0; // us to ms
printf("%f ms.\n", elapsedTime);
}

关于c - 如何测量 C 中的时间间隔?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2150291/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com