- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
在我的项目中,我使用 struct timespec
如下
struct timespec start, end;
clock_gettime(CLOCK_REALTIME,&start);
/* Do something */
clock_gettime(CLOCK_REALTIME,&end);
它返回一个值作为 ((((unsigned64)start.tv_sec) * ((unsigned64)(1000000000L))) + ((unsigned64)(start.tv_nsec))))
谁能告诉我为什么我们使用 unsigned64
格式并帮助我详细了解这种结构?我在我的研究中使用这段代码,以纳秒精度计算代码执行时间
最佳答案
无符号 32 位类型(如现代平台上的 unsigned int
)的最大值略高于 40 亿。如果您有 5 并将其乘以 10 亿(就像在问题的代码中所做的那样),您将得到 50 亿的值,大于 32 位无符号类型中可以包含的值。输入 64 位类型,它可以容纳 很多 更高的值(18446744073709551615
更精确,与无符号的 32 位最大值进行比较只有 4294967295
的值)。
顺便说一句,代码可以简化成
start.tv_sec * 1000000000ULL + start.tv_nsec
这种简化是可能的,因为编译器会根据需要自动将低精度类型和值转换为高精度。由于表达式中有一个 unsigned long long
(这就是 ULL
的意思)文字值,表达式的其余部分也将转换为 unsigned long long
结果将是 unsigned long long
类型。
关于c - 需要清楚地了解 timespec 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21572559/
我尝试创建一个代码来生成时间戳。我发现了两种不同的结构,但不清楚有什么区别?谁能帮我理解这两种结构有什么区别? struct timespec 和 timespec now? 最佳答案 以下结构: s
我读过很多关于这个的帖子,我可以告诉你(我读过的每篇帖子都有这组假设,所以让我们早点摆脱它): 我已经适本地包含了 time.h 我已经指定了 POSIX 常量和 -std=gnu99 代码: #if
这个问题在这里已经有了答案: Visual Studio error with 'timespec' structure (5 个答案) 关闭 6 年前。 使用 Visual Studio 2015
我看过this解决方案,但我遇到了同样的错误。对于一个类,我们不得不切换到 c99 编译器而不是 gnu,但现在 timespec 似乎被破坏了。除了“timespec 的存储大小未知”之外,我还收到
在 posix 上,可以使用 timespec 来计算准确的时间长度(如秒和毫秒)。不幸的是,我需要使用 Visual Studio 编译器迁移到 Windows。 VS time.h 库没有声明 t
新用户,如果这个解释不够清楚,我很抱歉...我在创建要在多个源文件之间修改/使用的 timespec 变量时遇到了问题。我的程序旨在确定从我的初始程序中执行另一个程序所需的时间,因此我需要在两个源文件
在 posix 上,可以使用 timespec 来计算准确的时间长度(如秒和毫秒)。不幸的是,我需要使用 Visual Studio 编译器迁移到 Windows。 VS time.h 库没有声明 t
比较两个 timespec 值以查看哪个先发生的最佳方法是什么? 下面有没有问题? bool BThenA(timespec a, timespec b) { //Returns true i
在我的项目中,我使用 struct timespec 如下 struct timespec start, end; clock_gettime(CLOCK_REALTIME,&start); /* D
在累积 struct timespec 增量的程序中,我正在执行以下逻辑: struct timespec accu, start, stop; for (...) { // record s
struct timeval 和 struct timespec 除了精度不同之外还有什么区别?如果我需要的精度低于 µs(例如,毫秒),我为什么要使用一个而不是另一个? 在我的编译器上(ARM 的
以下是重现该问题的一个最小示例。对我来说,这段代码看起来很无辜。我怀疑 struct timespc 背后有一些魔法;但是,我找不到任何可以解释它崩溃原因的内容。 #include #include
我希望格式化 ns 和 ns_old,以便我验证是否遵守设置的 inter_arrival(即,如果我给 inter_arrival =10,它应该正确地反射(reflect)在 ns_diff 中)
我有一个 struct timespec我需要转换为 struct timeval 的对象用于 lutimes(...) . 我尝试了以下操作,但是 lutimes()提示。 const struct
我只是在学习如何使用 clock_getres(网络上几乎没有任何关于此的好文档)。我的代码如下所示: timespec now; clock_getres(CLOCK_REALTIME,&now);
myheader.h #ifndef _MYHEAD_ #define _MYHEAD_ #include #include #include #include #include #incl
我正在从 Linux 内核读取(触摸)事件。我想记录这些事件的时间,但我不知道这些事件是作为 timespec 还是 timeval 传递的。谁能指出我正确的方向? 示例代码(从缓冲区读取事件后) s
我正在将我的应用程序从 unix 移植到 windows,但我遇到了困难。在我的应用程序中,我需要找到以微秒为单位的时间(由于它是高精度应用程序,因此整个应用程序在很大程度上依赖于它)。 以前我使用的
这个答案很难找到,我觉得很奇怪。我已经包含了 time.h 和 ctime,但是 vc9 仍然提示未定义的类型“timespec”。我在这里、MSDN 和网络上进行了搜索(即使存在确切的编译器错误),
我正在使用 struct timespec 结构,这里是: struct timespec { time_t tv_sec; /* Seconds
我是一名优秀的程序员,十分优秀!