我想要做的就是获取系统时钟值,以便我可以测量它们之间的时间,以便使用Mac上的Free Pascal和OSX来比较备用编码的速度。
免费Pascal的文档更多地是关于日期和总时间戳,而不是关于系统时钟,据我可以从他们的在线文档中收集。系统时钟值会更精确。
我在stackoverflow中的研究发现没有什么特定于我的情况。
我已经能够在本机OSX应用程序中使用Xcode执行此操作,但由于其跨平台可移植性,我希望将Free Pascal用于此应用程序。
有没有人发现如何做我需要的?谢谢。
答案 0 :(得分:0)
这个函数是gettickcount64,但是还没有在OS X上切换到clock_gettime(CLOCK_MONOTONIC)但仍然使用fpgettimeofday
似乎mach_absolute_time没有暴露在任何地方,但您可以自己声明导入。您还可以检查碳系统功能的univint标头。也许其中一个MIDI或(核心)音频标题有精确计时的东西
答案 1 :(得分:0)
所以我通过编写一个使用内联汇编程序代码的函数来解决我的问题。计数器的低阶longint部分足以满足我的需要。如果计数器在测试运行期间发生累积到高位32位,我从结束值减去开始将得到否定答案,所以我再次运行测试。不幸的是,时钟滴答差异包括后台进程中的滴答,因此我需要在测试期间最小化活动进程。
function HdweTick: int64;
type truc = record
case ovlay: integer of
0: (eax, edx :longint);
1: (val64 :int64 );
end;
var trec :truc;
begin
asm
RDTSC
movl %eax,trec.eax
movl %edx,trec.edx
end;
HdweTick := trec.val64;
end;
如果你真的需要64位时钟滴答计数,你可以这样做:
kivy.uix.widget.Widget