gpt4 book ai didi

c - 这些 msec<->timeval 函数是否正确?

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:42 27 4
gpt4 key购买 nike

我在这个程序中有一个错误,我不断地回到这两个函数,但它们对我来说是正确的。这里有什么问题吗?

long visual_time_get_msec(VisTime *time_)
{
visual_log_return_val_if_fail(time_ != NULL, 0);

return time_->tv_sec * 1000 + time_->tv_usec / 1000;
}


int visual_time_set_from_msec(VisTime *time_, long msec)
{
visual_log_return_val_if_fail(time_ != NULL, -VISUAL_ERROR_TIME_NULL);


long sec = msec / 1000;
long usec = 0;

visual_time_set(time_, sec, usec);

return VISUAL_OK;
}

最佳答案

您的第一个函数是向下舍入,因此 1.000999 秒四舍五入为 1000 毫秒,而不是 1001 毫秒。要解决这个问题(使其四舍五入到最接近的毫秒),您可以这样做:

long visual_time_get_msec(VisTime *time_)
{
visual_log_return_val_if_fail(time_ != NULL, 0);

return time_->tv_sec * 1000 + (time_->tv_usec + 500) / 1000;
}

Fuzz已经在你的第二个例子中指出了截断 - 我唯一要补充的是你可以使用模运算符稍微简化它:

long sec = msec / 1000;
long usec = (msec % 1000) * 1000;

(以上所有假设您没有处理负时间间隔 - 如果您是,它会变得更加复杂)。

关于c - 这些 msec<->timeval 函数是否正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159826/

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