当前位置: 首页 > 知识库问答 >
问题:

C-以秒为单位计时我的程序,微秒精度为

常培
2023-03-14

我试图找出我所写的C程序的用户时间(在Linux机器上)。目前,我在代码开始时调用一次gettimeofday(),在代码结束时调用一次。我使用timeval结构和difftime(stop.tv_sec,start.tv_sec)来获取经过的秒数。这将返回整秒,如“1.000000”。但是,我的项目要求我的程序以秒为单位计时,精度为微秒,例如“1.234567”。如何找到该值?我知道gettimeofday()也会记录微秒。tv_usec,但我不确定如何使用此值并正确格式化。

共有3个答案

越高峻
2023-03-14

如果需要微秒:

long long usec;

usec = tv.tv_sec;
usec *= 1000000;
usec += tv.tv_usec;

如果需要小数秒[浮点]:

double asec;

asec = tv.tv_usec;
asec /= 1e6;
asec += tv.tv_sec;

以下是一些完整的功能:

// tvsec -- get current time in absolute microseconds
long long
tvsec(void)
{
    struct timeval tv;
    long long usec;

    gettimeofday(&tv,NULL);

    usec = tv.tv_sec;
    usec *= 1000000;
    usec += tv.tv_usec;

    return usec;
}

// tvsecf -- get current time in fractional seconds
double
tvsecf(void)
{
    struct timeval tv;
    double asec;

    gettimeofday(&tv,NULL);

    asec = tv.tv_usec;
    asec /= 1e6;
    asec += tv.tv_sec;

    return asec;
}

注意:如果您想要更高的精度(例如纳秒),可以使用clock\u gettime(clock\u REALTIME,…) 并应用类似的转换

南门嘉
2023-03-14

试着把最初的时间存储起来,然后从你完成的最后时间中减去。

storedValue = timer.tv_sec + 0.000001 * timer.tv_usec
timer.tv_sec + 0.000001 * timer.tv_usec - storedValue
蒯慈
2023-03-14

使用timersub功能。它有三个参数:第一个是初始时间,第二个是最终时间,第三个是结果(差异)。这三个参数都是指向timevalstruct的指针。

 类似资料:
  • 两个时间戳的示例 困难的部分原因是我认为没有类似的包来处理它。我不确定是否需要使用正则表达式来提取秒,然后将纳秒转换为毫秒。我愿意接受任何建议。 另外,您建议如何处理?我想我应该使用,然后像这样的包可以解析时间戳,甚至可以达到纳秒级的精度?

  • 问题内容: 我通过传递ipAddress来对方法进行调用,它会返回ipAddress的位置,例如国家/地区,城市等。因此,我试图查看每个调用花费的时间。因此,我在调用方法之前设置了start_time,在调用之后设置了end_time。 所以有时候我得到的差为0 。并且resp包含有效的响应。 因此,这意味着有时需要0毫秒才能恢复响应。任何建议将不胜感激。 问题答案: 试试这个

  • 问题内容: 我想在用log4j生成的日志文件的每个条目的时间戳中添加微秒,这可能吗? 我已经搜索了官方文档,但是没有提到毫秒以下的单位。 现在我有一个转换模式,如下所示: 在日期转换模式( %d* )中,我想在毫秒值( SSS )之后添加 微秒 ,有没有办法做到这一点? * 问题答案: 如果要显示微秒,则需要自己添加。可以使用自定义格式化程序(而不是PatternFormatter)来完成

  • 我在代码中使用倒计时。问题是,倒计时不准确。onTick方法并不总是每秒执行一次,它可能需要几毫秒的时间。当试图基于millisUntilFinished执行某项任务时,这会成为一个问题。当我的20秒计时器超过10秒时,我正在尝试登录: 以下是相关代码: 这里出现了一个问题,因为countDownTimer可能永远不会有millisUntilFinished==10000,它可能等于1001,因此

  • 问题内容: 我想每毫秒更改一次计时器,但是它没有按预期工作。 结果是 计时器以毫秒为单位更改为100(00:100),然后更改为01:00 = 40真实秒 邓肯方法: 结果:456680125.54539第一次打印 问题答案: 正如Martin在评论中所说,计时器的分辨率为50-100毫秒(0.05至0.1秒)。尝试以短于该间隔的时间运行计时器将无法获得可靠的结果。另外,计时器不是实时的。它们取决

  • 问题内容: 因此,我刚刚发现MySQL中最令人沮丧的错误。 显然,该字段及其支持功能不支持比秒更高的精度! 所以我正在使用PHP和Doctrine,我真的需要那些微秒(我正在使用属性)。 我发现我可以使用一个字段来存储值。但是学说会增加毫秒吗?我认为它只是将NOW()分配给该字段。我还担心通过代码散布的日期操作功能(在SQL中)会中断。 我还看到了有关编译UDF扩展的内容。这是不可接受的,因为我或

  • 问题内容: 在Unix系统上,是否有办法在Java中获得具有微秒级精度的时间戳?类似于C的gettimeofday函数。 问题答案: 不,Java没有该功能。 它确实具有System.nanoTime(),但是仅提供了一些先前已知时间的偏移量。因此,虽然您不能从中获取绝对数字,但可以使用它来测量纳秒(或更高)的精度。 请注意,JavaDoc表示,尽管这提供了纳秒级的精度,但这并不意味着纳秒级的精度

  • 2015-05-09 00:10:23.999750900//后9位表示纳秒 当通过模式解析时 YYYY-MM-DD HH:MM:SS.SSSSSSS//9“s”符号 null null 有没有其他方法可以通过只向标准实现提供一个模式来获得正确的解决方案,而不需要任何其他代码修改或字符串操作?