亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在 Windows 中使用 Go 將進程設置為 CPU?

如何在 Windows 中使用 Go 將進程設置為 CPU?

Go
達令說 2021-10-04 16:18:48
我想在win7中使用Go將進程設置為CPU,代碼如下:package mainimport (    "fmt"    "math"    "runtime"    "syscall"    "unsafe")func SetAffinity(pid int, mask *int64) {    syscall.Syscall(syscall.SYS_SCHED_SETAFFINITY,        uintptr(pid), 8, uintptr(unsafe.Pointer(mask)))}func GetAffinity(pid int, mask *int64) {    syscall.Syscall(syscall.SYS_SCHED_GETAFFINITY,        uintptr(pid), 8, uintptr(unsafe.Pointer(mask)))}var cpuNum = float64(runtime.NumCPU())var setx = []struct {    args     int    expected int64}{    {0, int64(math.Pow(2, cpuNum)) - 2},}func main() {    for _, ca := range setx {        var cpuSet int64        GetAffinity(ca.args, &cpuSet)        cpuSet = cpuSet & 0XFFFFFFE        SetAffinity(ca.args, &cpuSet)        fmt.Println(cpuSet)        GetAffinity(ca.args, &cpuSet)        fmt.Println(cpuSet)    }}當我使用時go run affinity.go,獲取以下信息:# command-line-arguments.\affinity.go:12: undefined: syscall.SYS_SCHED_SETAFFINITY.\affinity.go:13: not enough arguments in call to syscall.Syscall.\affinity.go:17: undefined: syscall.SYS_SCHED_GETAFFINITY.\affinity.go:18: not enough arguments in call to syscall.Syscall我發現SYS_SCHED_SETAFFINITY它只在 linux 中使用。那么,我想在Windows(Win7)中使用Go將進程設置為cpu,我該怎么辦?
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻1825條經驗 獲得超4個贊

您必須調用 WinAPI SetProcessAffinityMask。


這樣的事情應該工作:


func setProcessAffinityMask(h syscall.Handle, mask uintptr) (err error) {

    r1, _, e1 := syscall.Syscall(syscall.NewLazyDLL("kernel32.dll").NewProc("SetProcessAffinityMask").Addr(), 2, uintptr(h), mask, 0)

    if r1 == 0 {

        if e1 != 0 {

            err = error(e1)

        } else {

            err = syscall.EINVAL

        }

    }

    return

}

h當然,它是進程句柄,并且mask是所需的親和掩碼。


這是從BSD 許可下的Go benchmarks 中獲取的。


查看完整回答
反對 回復 2021-10-04
  • 1 回答
  • 0 關注
  • 217 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號