对于一个应用程序或可执行程序,我如何通过编程来设置它的进程优先级?
主要软件: LabWindows/CVI Development Systems>>LabWindows/CVI Full Development System
主要软件版本: 7.1
主要软件修正版本: N/A
次要软件: N/A
问题: 在Windows 9x/NT/2000/XP中,可以通过Win32 SDK对一个进程通过编程来设定其优先级吗?
解答: 以下就是在Windows 9x下使用的函数。在Windows NT/2000/XP下,在执行这些函数前您必须肯定您有管理员权限。对于任何主要的32-bit 编译器(CVI, Visual C++, Borland C++),可查看
Win32 SDK Help 来获得更多的下列函数的信息。
// CODE FRAGMENT
#include <windows.h>
HANDLE hProcess;
int stat;
hProcess = GetCurrentProcess();
stat = SetPriorityClass(hProcess, NORMAL_PRIORITY_CLASS);
SetPriorityClass函数的第二个参数可以设置为:
- IDLE_PRIORITY_CLASS - 这个进程中的线程仅当系统空闲时才能运行。任何优先级更高的进程中的线程可以抢占这个进程中的线程。
- NORMAL_PRIORITY_CLASS
- HIGH_PRIORITY_CLASS -这是个运行时间紧要任务的进程,这些任务必须立即执行。这些进程中的线程可以抢占一般和空闲优先级进程的线程。
- REALTIME_PRIORITY_CLASS(这个并不推荐使用,因为这会阻止操作系统的其它进程执行重要的任务。举个例子,一个实时的执行间隔非常小的进程会引起磁盘缓存不能冲掉或者引起鼠标不响应)。
Windows 2000/XP/Longhorn也支持下列的类:
- ABOVE_NORMAL_PRIORITY_CLASS - 这个进程的优先级高于NORMAL_PRIORITY_CLASS 但是低于HIGH_PRIORITY_CLASS。
- BELOW_NORMAL_PRIORITY_CLASS - 这个进程的优先级高于IDLE_PRIORITY_CLASS 但是低于NORMAL_PRIORITY_CLASS。
对2500个点进行冒泡排序...
IDLE 18.34秒
NORMAL 2.28秒
HIGH 1.72 秒
REALTIME 1.57秒
一定要在退出应用程序之前把优先级设回到NORMAL!当您在IDE中运行应用程序时,这是重要的。举个例子,如果您在LabVIEW 或 LabWindows/CVI里这么做的话,实际上您的应用程序是在修改LabVIEW或者LabWindows/CVI的进程优先级。
注意的是,在基于Win32的操作系统下,优先级无法保证CPU的时间分配,它只是一个比其它低优先级的进程/线程运行更快的方法。而且,实时进程优先级也不保证像其它真正的实时操作系统那样的确定性。
相关链接:
附件:
报告日期: 05/17/2006
最近更新: 05/19/2006
文档编号: 0QL86NZL
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.