gpt4 book ai didi

c - 获取当前时间的 future 时间规范

转载 作者:行者123 更新时间:2023-11-30 19:00:29 28 4
gpt4 key购买 nike

我可以使用timespec_get C11 函数获取当前时间。假设我想检索当前时间的下一个毫秒的 timespec 值,我应该如何编写 get_due_time 函数?

struct timespec get_due_time(long ms) { 
struct timespec now, due;
timespec_get(&now, TIME_UTC);
...
return due;
}

最佳答案

struct timespec get_due_time(long ms)
{
assert(ms >= 0);
struct timespec now, due;
timespec_get(&now, TIME_UTC);
due.tv_sec = now.tv_sec + ms / 1000;
due.tv_nsec = now.tv_nsec + (ms % 1000) * 1000000;
if (due.tv_nsec >= 1000000000)
{
due.tv_nsec -= 1000000000;
due.tv_sec++;
}
return due;
}

通过将整秒添加到当前时间的秒部分(一秒有 1000 毫秒)来处理较大的 ms 值。通过乘以一百万(一毫秒中的纳秒数)来处理 ms 值的亚秒部分。通过从 tv_nsec 中减去 10 亿(一秒内的纳秒数)并增加 tv_sec 部分来处理 tv_nsec 溢出。假设 timespec_get() 返回标准化的 struct timespec 值(因此 tv_nsec 的范围是 0..999,999,999。),该算术是安全的。 >

您可以简单地修改 now 并返回它,而不是创建和修改 due。不过,这并不是一个严重的问题。

您可以创建和使用如下名称:

enum
{
MILLISECONDS_PER_SECOND = 1000,
NANOSECONDS_PER_SECOND = 1000000000,
NANOSECONDS_PER_MILLISECOND = NANOSECONDS_PER_SECOND / MILLISECONDS_PER_SECOND
};

我不确定这是否值得。

如果您需要处理负偏移量(ms 为负值),则需要做更多工作,在添加负数并递减后处理负结果 tv_nsec如有必要,tv_sec

关于c - 获取当前时间的 future 时间规范,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59553557/

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