1. 背景

我在 Linux 下写了一个简单的 udp 程序,用于接收设备端发送的 udp 数据。并且,为了保证程序不被打断,我使用 syscall.Setpriority() 给进程设置了一个高优先级。但是,这个函数只能在 Linux 下使用,无法用在 Win10 中。在 Win 环境下设置进程优先级的函数是 BOOL SetPriorityClass(HANDLE hProcess, DWORD dwPriorityClass)

下面说一下 go 中如何使用该函数。

:go 版本为 go1.13.5 windows/amd64

2. 下载

go get -u golang.org/x/sys
golang.org/x/sys

3. SetPriorityClass() 说明

函数原型:

Handle process:函数句柄,可以通过调用 windows.CurrentProcess() 来获取当前进程的句柄;

uint32 priorityClass:目标优先级,包括以下几种:

4. 测试

如果不对进程/任务的优先级进行设置,那么程序的默认优先级为正常—— NORMAL_PRIORITY_CLASS。执行如下代码生成的程序后,进程优先级会被设置为

main.go

高优先级进程

5. 遗留问题

进程优先级无法设置为实时优先级(REALTIME_PRIORITY_CLASS),能设置的最高优先级为 HIGH_PRIORITY_CLASS。