获取单调时间,与CLOCK_MONOTONIC相同。

3
我怎样才能在Go中获取从引导开始的单调时间(以纳秒为单位)? 我需要与以下C代码返回的相同值:
static unsigned long get_nsecs(void)
{
    struct timespec ts;

    clock_gettime(CLOCK_MONOTONIC, &ts);
    return ts.tv_sec * 1000000000UL + ts.tv_nsec;
}

time 包中的函数似乎返回当前时间和/或日期。

1个回答

4

使用Go与cgo

使用unsigned long long来保证纳秒级的64位整数值。例如,在Windows上,unsigned long是32位整数值。

monotonic.go:

package main

import "fmt"

/*
#include <time.h>
static unsigned long long get_nsecs(void)
{
    struct timespec ts;
    clock_gettime(CLOCK_MONOTONIC, &ts);
    return (unsigned long long)ts.tv_sec * 1000000000UL + ts.tv_nsec;
}
*/
import "C"

func main() {
    monotonic := uint64(C.get_nsecs())
    fmt.Println(monotonic)
}

$ go run monotonic.go
10675342462493
$ 

这在 macOS 上无法编译。 - user2233706
1
适用于我的设备:MBP 2012,10.14.6 Mojave,并安装了Xcode命令行工具。您未指定的设置可能不同。还有@rocka2q - 感谢您提供简单的cgo示例 - 这是我第一次尝试! :-) - aMike
我在2019年的MacBook Pro上安装了Big Sur和Xcode命令行工具。 - user2233706
import "C" 之前,您可能已经删除了那些注释。这些注释也需要包含进来。 - RaiBnod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接