你目前正处于脱机状态,正在等待 Internet 重新连接

如何修改具有可视 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
kbVFp600 kbAPI

警告:本文已自动翻译

属性

文章 ID:193846 - 上次审阅时间:01/27/2005 08:34:21 - 修订版本: 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
反馈