如何修改具有可视 FoxPro 外壳应用程序的进程优先级

文章翻译 文章翻译
文章编号: 193846 - 查看本文应用于的产品
展开全部 | 关闭全部

本文内容

概要

进程的优先级将决定其执行由 Win32 内核的排定方式。具有较低优先级的流程相比更快地执行具有较高优先级的流程。本文介绍如何修改进程优先级的一个外壳的应用程序。

更多信息

Win32 支持以下四个优先级类:
  • 空闲
  • 普通
  • 实时
空闲是正确的优先级为系统监视应用程序或屏幕保护程序。

正常优先级类是默认值,该值指示没有特殊的日程排定需求的过程。

高优先级表示执行需要为其正常运行的立即执行的时间关键任务的过程。高优先级类进程的线程会抢占普通或空闲优先级类进程的线程。例如,用户,而不考虑在操作系统上负载的被调用时,必须迅速响应 Windows 任务列表。使用小心使用高优先级类时,因为一个高优先级类 CPU 限制应用程序可以使用几乎所有可用的周期。

在实时优先级表示可能优先级最高的进程。实时优先级类进程的线程会抢占所有其他进程,包括执行重要任务的操作系统进程的线程。例如对于实时进程的执行多个非常简短的时间间隔可能导致不能刷新或导致鼠标将不响应的磁盘缓存。几乎不应使用此优先级。

通过分配 CreateProcess API 调用的参数之一来设置进程的优先级。

下面的示例演示如何在运行 Windows 记事本应用程序在 Windows NT 4.0 和更高版本的 Windows 操作系统使用的空闲优先级。进程优先级是由 dwCreationFlags 变量传递给 CreateProcess() 控制的。在示例程序的顶部列出 DEFINEs 的四个受支持的优先级类。

一次 Notepad.exe 运行,以检查优先级,启动 Windows 任务管理器,选择进程选项卡,用鼠标右键单击 Notepad.exe 从弹出菜单中选择设置优先级。

要 Notepad.exe 完全限定的路径名可能需要修改的变量 File2Run 在赋值语句中。

示例代码

   #DEFINE NORMAL_PRIORITY_CLASS 32
   #DEFINE IDLE_PRIORITY_CLASS 64
   #DEFINE HIGH_PRIORITY_CLASS 128
   #DEFINE REALTIME_PRIORITY_CLASS 1600

   DECLARE INTEGER CreateProcess IN kernel32.DLL ;
      INTEGER lpApplicationName, ;
      STRING lpCommandLine, ;
      INTEGER lpProcessAttributes, ;
      INTEGER lpThreadAttributes, ;
      INTEGER bInheritHandles, ;
      INTEGER dwCreationFlags, ;
      INTEGER lpEnvironment, ;
      INTEGER lpCurrentDirectory, ;
      STRING @lpStartupInfo, ;
      STRING @lpProcessInformation

   DECLARE INTEGER GetLastError IN kernel32.DLL

   * Startup info is 68 bytes, of which we need to
   * initially populate the 'cb' or Count of Bytes member
   * with the overall length of the structure.
   * The remainder should be 0-filled.
   START = long2str(68) + REPLICATE(CHR(0), 64)

   * PROCESS_INFORMATION structure is 4 longs,
   * or 4*4 bytes = 16 bytes, which we'll initially zero.
   process_info = REPLICATE(CHR(0), 16)

   * Start a copy of NOTEPAD (EXE name must be null-terminated)
   File2Run = "C:\WINNT\NOTEPAD.EXE" + CHR(0)

   * Call CreateProcess, obtain a process handle. Treat the
   * application to run as the 'command line' argument, accept
   * all other defaults. Important to pass the start and
   * process_info by reference.
   RetCode = CreateProcess(0, File2Run, 0, 0, 1, ;
      IDLE_PRIORITY_CLASS, 0, 0, @START, @process_info)

   * Unable to run, exit now.
   IF RetCode = 0
      =MESSAGEBOX("Error occurred. Error code: ", GetLastError())
      RETURN
   ENDIF

   ********************
   FUNCTION long2str
   ********************
   * passed : 32-bit non-negative numeric value (m.longval)
   * returns : ascii character representation of passed
   *    value in low-high format (m.retstr)
   * example :
   *   m.long = 999999
   *   m.longstr = long2str(m.long)
   PARAMETERS m.longval

   PRIVATE i, m.retstr

   m.retstr = ""
   FOR i = 24 TO 0 STEP -8
      m.retstr = CHR(INT(m.longval/(2^i))) + m.retstr
      m.longval = MOD(m.longval, (2^i))
   NEXT
   RETURN m.retstr
						

参考

"高级的 windows",Jeffrey Richter 微软出版社页 92-103,三版 1997,ISBN: 1 57231 548 2

属性

文章编号: 193846 - 最后修改: 2005年1月27日 - 修订: 3.4
这篇文章中的信息适用于:
  • Microsoft Visual FoxPro 3.0b 标准版
  • Microsoft Visual FoxPro 5.0 标准版
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 专业版
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 专业版
  • Microsoft Visual FoxPro 9.0 Professional Edition
关键字:?
kbmt kbhowto KB193846 KbMtzh
机器翻译
注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。
点击这里察看该文章的英文版: 193846
Microsoft和/或其各供应商对于为任何目的而在本服务器上发布的文件及有关图形所含信息的适用性,不作任何声明。 所有该等文件及有关图形均"依样"提供,而不带任何性质的保证。Microsoft和/或其各供应商特此声明,对所有与该等信息有关的保证和条件不负任何责任,该等保证和条件包括关于适销性、符合特定用途、所有权和非侵权的所有默示保证和条件。在任何情况下,在由于使用或运行本服务器上的信息所引起的或与该等使用或运行有关的诉讼中,Microsoft和/或其各供应商就因丧失使用、数据或利润所导致的任何特别的、间接的、衍生性的损害或任何因使用而丧失所导致的之损害、数据或利润不负任何责任。

提供反馈

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com