这些是msec<-&燃气轮机;timeval函数正确吗?
我在这个程序中有一个bug,我不断地回到这两个函数,但我觉得它们是对的。这里有什么问题吗这些是msec<-&燃气轮机;timeval函数正确吗?,c,timeval,C,Timeval,我在这个程序中有一个bug,我不断地回到这两个函数,但我觉得它们是对的。这里有什么问题吗 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 *t
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;
}
从毫秒设置的可视时间看起来不正确 如果有人从_msec(time,999)调用visual _time _set _,那么您的结构将被设置为零,而不是999000us 你应该做的是:
// Calculate number of seconds
long sec = msec / 1000;
// Calculate remainding microseconds after number of seconds is taken in to account
long usec = (msec - 1000*sec) * 1000;
这真的取决于你的输入,但这是我的2美分:-)视觉时间设置从毫秒开始看起来不正确 如果有人从_msec(time,999)调用visual _time _set _,那么您的结构将被设置为零,而不是999000us 你应该做的是:
// Calculate number of seconds
long sec = msec / 1000;
// Calculate remainding microseconds after number of seconds is taken in to account
long usec = (msec - 1000*sec) * 1000;
这确实取决于您的输入,但这是我的2美分:-)您的第一个函数是向下舍入,因此1.000999秒被舍入为1000ms,而不是1001ms。要解决此问题(使其精确到毫秒),可以执行以下操作:
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;
}
已经在第二个示例中指出了截断-我要补充的唯一一件事是,您可以使用模运算符稍微简化它:
long sec = msec / 1000;
long usec = (msec % 1000) * 1000;
(以上假设您没有处理负时间值-如果是,则会变得更复杂)。您的第一个函数是向下舍入,因此1.000999秒被舍入为1000ms,而不是1001ms。要解决此问题(使其精确到毫秒),可以执行以下操作:
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;
}
已经在第二个示例中指出了截断-我要补充的唯一一件事是,您可以使用模运算符稍微简化它:
long sec = msec / 1000;
long usec = (msec % 1000) * 1000;
(以上假设您没有处理负时间间隔-如果是,它会变得更复杂)