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/sys3. SetPriorityClass() 说明
函数原型:
Handle process:函数句柄,可以通过调用 windows.CurrentProcess() 来获取当前进程的句柄;
uint32 priorityClass:目标优先级,包括以下几种:
4. 测试
如果不对进程/任务的优先级进行设置,那么程序的默认优先级为正常—— NORMAL_PRIORITY_CLASS。执行如下代码生成的程序后,进程优先级会被设置为高。
main.go:
5. 遗留问题
进程优先级无法设置为实时优先级(REALTIME_PRIORITY_CLASS),能设置的最高优先级为 HIGH_PRIORITY_CLASS。