在LabVIEW中编程更改进程的优先级
主要软件:
主要软件版本: 5.0.1
主要软件修正版本: N/A
次要软件: N/A
问题: 在Windows 9x/NT/2000/XP下,能否使用LabVIEW编程设置一个进程的优先级?
解答: 在labVIEW中您可以调用kernel32动态链接库来更改进程的优先级。我们需要两个函数:GetCurrentProcess()和SetPriorityClass()。
有6个优先级可供您选择,这6个优先级及其标识码列表如下:
空闲(IDLE): | IDLE_PRIORITY_CLASS |
次低(BELOW NORMAL): | BELOW_NORMAL_PRIORITY_CLASS |
普通(NORMAL): | NORMAL_PRIORITY_CLASS |
次高(ABOVE NORMAL): | ABOVE_NORMAL_PRIORITY_CLASS |
高级(HIGH PRIORITY): | HIGH_PRIORITY_CLASS |
实时(REAL TIME): | REALTIME_PRIORITY_CLASS |
在LabVIEW中,首先建立一个调用库函数节点,并指向您的kernel32.dll(一般位于c:\windows\system32)。建立调用后函数原型的样子为:
unsigned long GetCurrentProcess(void)
因为这是调用了Windows的API函数,调用方式改为
stdcall(WINAPI)
。第二个调用库函数VI与第一个相似,除了您是使用SetPriorityClass函数。建立第二个调用库函数节点后函数原型的样子为:
unsigned long SetPriorityClass(unsigned long handle, unsigned long priority)
同样的,调用方式改为
stdcall(WINAPI)
。 GetPriorityClass函数的返回值与SetPriorityClass函数的句柄相关,相应的优先级类型是十六进制 (hex)。在winbase.h文件中(包含在Microsoft的WIN32 SDK中),您可以找到定义优先级的声明。它们是:
#define IDLE_PRIORITY_CLASS 0x00000040
#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000
#define NORMAL_PRIORITY_CLASS 0x00000020
#define ABOVE_NORMAL_PRIORITY_CLASS 0x00008000
#define HIGH_PRIORITY_CLASS 0x00000080
#define REALTIME_PRIORITY_CLASS 0x00000100
使用这些值,您可以指定线程的优先级。举例来说,如果您想把您进程的优先级设置为空闲(IDLE),只要在调用库函数节点的输入端连上一个十六进制值为40的常数就好了。
打开、运行附件中的例子。运行例子的时候,打开Windows的任务管理器,在您更改LabVIEW程序的优先级的时候可以观察LabVIEW优先级的状态。
相关链接:
KnowledgeBase 157CDF2F: How Can I Set Different Priorities for My LabVIEW or LabWindows/CVI Executables under Windows NT?
KnowledgeBase 0QL86NZL: How Can I Programmatically Set the Process Priority for an Application or Executable?
附件:
报告日期: 09/26/2006
最近更新: 10/17/2006
文档编号: 2MIBHS8R
Other Support Options
Ask the NI Community
Collaborate with other users in our discussion forums
Request Support from an Engineer
A valid service agreement may be required, and support options vary by country.