gpt4 book ai didi

将纳秒转换为微秒

转载 作者:行者123 更新时间:2023-11-30 14:57:08 25 4
gpt4 key购买 nike

我使用下面的代码将纳秒转换为微秒

此代码大部分运行良好,但有时我看到 usTick 给出的值远远超出当前时间。

例如。如果 usTick 中的当前时间是 63290061063 那么有时这个值是 126580061060。如果你看到它是双倍的。

类似地,我得到的另一个实例是当前时间是 45960787154,但 usTick 显示为 91920787152

typedef unsigned long long TUINT64 
unsigned long long GetMonoUSTick()
{
static unsigned long long usTick;
struct timespec t;
clock_gettime(CLOCK_MONOTONIC, &t);
usTick = ((TUINT64)t.tv_nsec) / 1000;
usTick = usTick +((TUINT64)t.tv_sec) * 1000000;
return usTick;
}

最佳答案

如果同一进程的多个线程并行访问变量以进行读/写或写/写,则需要保护这些变量。这可以通过使用互斥体来实现。

在这种情况下,局部变量usTick需要受到保护,因为它被定义为static

使用 POSIX 线程,代码可能如下所示:

  pthread_mutex_lock(&ustick_mutex);

usTick = ((TUINT64)t.tv_nsec) / 1000;
usTick = usTick +((TUINT64)t.tv_sec) * 1000000;

pthread_mutex_unlock(&ustick_mutex);

(为了清楚起见,省略了错误检查)

使用前请注意正确初始化ustick_mutex

关于将纳秒转换为微秒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44131230/

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