我有一种使用过剩的“主回路”。我希望能够测量渲染一个帧所需的时间。用于渲染框架的时间可用于其他计算。函数time的使用是不够的。
(time (procedure))我发现有一个叫做current-time的函数。我不得不进口一些包裹才能得到它。
(define ct (current-time))它将ct定义为time对象。不幸的是,我在计划中找不到任何关于日期的算术包。我看到在球拍中有一种叫做current-inexact-milliseconds的东西,这正是我所要寻找的,因为它有纳秒。
使用time对象,可以使用以下方法将其转换为纳秒
(time->nanoseconds ct)这让我做了这样的事
(let ((newTime (current-time)))
(block)
(print (- (time->nanoseconds newTime) (time->nanoseconds oldTime)))
(set! oldTime newTime))对我来说已经够好了,除了出于某些原因,它是这样打印的。
0
10000
0
0
10000
0
10000我正在用opengl渲染东西,我发现很难相信某些渲染循环花费了0纳秒。而且每一个循环都是相当稳定的,稳定的,足够占用相同的纳秒时间。
发布于 2013-09-17 12:26:07
毕竟,您的结果并不令人惊讶,因为我们必须考虑每个系统的有限定时器分辨率。事实上,处理器和OS进程通常都有一些限制。尽管石英振荡器可以达到并超过一纳秒的周期,但它们无法准确地计数。您还受到您所使用的功能的准确性和分辨率的限制。我看过小鸡方案的文档,但是没有类似于(当前不精确-毫秒)的→真实吗?球拍。
发布于 2013-09-21 21:35:45
在深入研究之后,我提出了一个解决方案,我应该用C编写它,并将它绑定到使用绑定的方案中。
(require-extension bind)
(bind-rename "getTime" "current-microseconds")
(bind* #<<EOF
uint64_t getTime();
#ifndef CHICKEN
#include <sys/time.h>
uint64_t getTime() {
struct timeval tim;
gettimeofday(&tim, NULL);
return 1000000 * tim.tv_sec + tim.tv_usec;
}
#endif
EOF
)不幸的是,这个解决方案并不是最好的,因为它只会是鸡计划。它可以作为一个库来实现,但是一个只包装在任何其他方案上不存在的函数的库是没有意义的。
因为纳秒实际上并没有多大意义,所以我得到了微秒。
注意这里的技巧,定义函数以在上面包装,并防止包含被bind解析。当该文件在Gcc中加载时,它将使用包含和函数定义进行构建。
发布于 2014-12-03 15:49:22
鸡有当前毫秒:http://api.call-cc.org/doc/library/current-milliseconds
https://stackoverflow.com/questions/18837493
复制相似问题