猿问

winapi GetSystemTimes 函数不填充 lpIdleTime/

  我坚持使用GetSystemTimes函数。C++ 代码没有任何问题,但是使用 golang 我得到三个 nil 而不是预期值


我的代码:


package main


import (

    "log"

    "syscall"

    "unsafe"

)


var (

    modKernel32 = syscall.NewLazyDLL("kernel32.dll")

    procGetSystemTimes = modKernel32.NewProc("GetSystemTimes")

)


type SystemTimes struct {

    IdleTime   *syscall.Filetime

    KernelTime *syscall.Filetime

    UserTime   *syscall.Filetime

}


func main() {

    times, err := getSystemTimes()

    if err != nil {

        log.Fatal(err)

    }

    log.Printf("idle=%v, kernel=%v, user=%v", times.IdleTime, times.KernelTime, times.UserTime)

}


func getSystemTimes() (times SystemTimes, err error) {

    res, _, err1 := procGetSystemTimes.Call(uintptr(unsafe.Pointer(times.IdleTime)), uintptr(unsafe.Pointer(times.KernelTime)), uintptr(unsafe.Pointer(times.UserTime)))

    if res != 1 {

        return times, err1

    }

    return

}

它非常简单,非常类似于 stdlib 中的 syscall 的 GetProcessTimes 函数。看看,我的程序打印了什么:


idle=<nil>, kernel=<nil>, user=<nil>

为什么?我期望错误或结果,为什么我的字段为空?


配置:win8 x64,go1.4.2 windows/amd64


烙印99
浏览 241回答 1
1回答
随时随地看视频慕课网APP

相关分类

Go
我要回答