作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用下面的代码将纳秒转换为微秒
此代码大部分运行良好,但有时我看到 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/
根据这个问题:Fractional power of units of measures in F# F# 中的度量单位不支持分数幂。 在我的应用程序中,有时考虑带有度量前缀的数据是有益的,例如当处理
我是一名优秀的程序员,十分优秀!