Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这些是msec<-&燃气轮机;timeval函数正确吗?_C_Timeval - Fatal编程技术网

这些是msec<-&燃气轮机;timeval函数正确吗?

这些是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

我在这个程序中有一个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 *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;
(以上假设您没有处理负时间间隔-如果是,它会变得更复杂)