C运行时间linux

C运行时间linux,c,linux,C,Linux,对不起,我是C的新手,但我做错了什么?几乎什么都试过了,但仍然无法计算t1和t2之间执行代码所需的秒数,总是返回我 在0.00秒内完成。 谢谢你的耐心:) #包括 时钟t1,t2; t1=时钟(); 睡眠(5); t2=时钟(); printf(“\n完成时间为%.2f秒。\n\n”,(t2-t1)*1.0/时钟/秒); 似乎时钟不考虑输入“墙时间”,而是考虑CPU时间。 当CPU休眠5秒时,它没有有效地执行代码。似乎时钟没有考虑输入“墙时间”,而是考虑CPU时间。 CPU休眠5秒时无法有效执行

对不起,我是C的新手,但我做错了什么?几乎什么都试过了,但仍然无法计算t1和t2之间执行代码所需的秒数,总是返回我 在0.00秒内完成。 谢谢你的耐心:)

#包括
时钟t1,t2;
t1=时钟();
睡眠(5);
t2=时钟();
printf(“\n完成时间为%.2f秒。\n\n”,(t2-t1)*1.0/时钟/秒);

似乎
时钟
不考虑输入“墙时间”,而是考虑CPU时间。
当CPU休眠5秒时,它没有有效地执行代码。

似乎
时钟
没有考虑输入“墙时间”,而是考虑CPU时间。 CPU休眠5秒时无法有效执行代码。

clock()
不适合测量经过的时间。它的分辨率通常很低,它只测量CPU时间,而不是墙壁时间。如果您的目标是Unix,您应该使用
clock\u gettime(clock\u MONOTONIC,…)
。在Windows上,QueryPerformanceCounter()是要使用的API

值得注意的是,
gettimeofday()
也不适用,因为它受闰秒和网络时间协议调整的影响。

clock()
不适用于测量经过的时间。它的分辨率通常很低,它只测量CPU时间,而不是墙壁时间。如果您的目标是Unix,您应该使用
clock\u gettime(clock\u MONOTONIC,…)
。在Windows上,QueryPerformanceCounter()是要使用的API

值得注意的是,
gettimeofday()
也不合适,因为它受闰秒和网络时间协议调整的影响。

如果粗粒度(整秒)是可以的,也许
time(2)
time\u t
就足够了

例如:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

static time_t t1, t2;

int
main(void)
{
  t1 = time(0);
  (void) sleep(5);
  t2 = time(0);

  (void) printf("\nFinished in %d seconds.\n\n", (int) (t2-t1));

  return 0;
}
#包括
#包括
#包括
静态时间t1,t2;
int
主(空)
{
t1=时间(0);
(5)睡眠;
t2=时间(0);
(void)printf(“\n在%d秒内完成。\n\n”,(int)(t2-t1));
返回0;
}
如果粗粒度(整秒)可以,那么时间(2)和时间就足够了

例如:

#include <stdio.h>
#include <time.h>
#include <unistd.h>

static time_t t1, t2;

int
main(void)
{
  t1 = time(0);
  (void) sleep(5);
  t2 = time(0);

  (void) printf("\nFinished in %d seconds.\n\n", (int) (t2-t1));

  return 0;
}
#包括
#包括
#包括
静态时间t1,t2;
int
主(空)
{
t1=时间(0);
(5)睡眠;
t2=时间(0);
(void)printf(“\n在%d秒内完成。\n\n”,(int)(t2-t1));
返回0;
}

谢谢您的回复,我应该用什么来代替?我的计划是计算网络传输速度,我可以计算数据包的输入/输出,但我需要一些计时器来计算每秒的数据包数,但我不确定用什么来代替时钟。
gettimeofday()
--分辨率是微秒。感谢您的回复,我应该用什么来代替?我的计划是计算网络传输速度,我可以计算数据包的输入/输出,但我需要一些计时器来计算每秒的数据包数,但我不确定用什么来代替时钟。
gettimeofday()
——分辨率为微秒。非常好,谢谢!顺便说一下,有一个问题:为什么要在sleep和printf前面添加(void)?这两个示例程序都不会处理
sleep(3)
printf(3)
返回值。出于长期的习惯,我将代码忽略的返回值转换为(void)返回值,但我很少在别人的程序中看到这种复杂程度,而且我的风格可能与当前的实践(或习惯用法)不匹配。您可能会阅读这些函数的文档,并考虑长时间运行或非常重要的应用程序可能需要检查它们的返回值。顺便说一下,有一个问题:为什么要在sleep和printf前面添加(void)?这两个示例程序都不会处理
sleep(3)
printf(3)
返回值。出于长期的习惯,我将代码忽略的返回值转换为(void)返回值,但我很少在别人的程序中看到这种复杂程度,而且我的风格可能与当前的实践(或习惯用法)不匹配。您可能会阅读这些函数的文档,并考虑长时间运行或非常重要的应用程序何时可能需要检查它们的返回值。