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

huangapple go评论82阅读模式
英文:

Get monotonic time, same as CLOCK_MONOTONIC

问题

你可以使用Go语言中的time包来获取从启动开始的单调时间(以纳秒为单位)。以下是一个示例代码:

package main

import (
	"fmt"
	"time"
)

func getNsecs() uint64 {
	ts := time.Now().UnixNano()
	return uint64(ts)
}

func main() {
	nsecs := getNsecs()
	fmt.Println(nsecs)
}

在上面的代码中,getNsecs函数使用time.Now().UnixNano()来获取当前时间的纳秒表示。它返回一个uint64类型的值,表示从启动开始的单调时间。你可以在main函数中调用getNsecs函数来获取并打印这个值。

请注意,Go语言中的时间函数返回的是当前时间,而不是从启动开始的时间。因此,你需要使用当前时间减去启动时间来获取从启动开始的单调时间。

英文:

How can I get the monotonic time from boot in nanoseconds in Go? I need the same value that the following C code would return:

static unsigned long get_nsecs(void)
{
    struct timespec ts;

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

The functions in the time package seem to return the current time and/or date.

答案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
$
英文:

Use Go with cgo.

Use unsigned long long to guarantee a 64-bit integer value for nanoseconds. For example, on Windows, unsigned long is a 32-bit integer value.

monotonic.go:

package main

import &quot;fmt&quot;

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

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

$ go run monotonic.go
10675342462493
$ 

huangapple
  • 本文由 发表于 2022年3月9日 05:53:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/71401903.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定