在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?

附件:


LabVIEW Priority.vi



报告日期: 09/26/2006
最近更新: 10/17/2006
文档编号: 2MIBHS8R