Cómo modificar la prioridad del proceso de una aplicación de shell con Visual FoxPro

Seleccione idioma Seleccione idioma
Id. de artículo: 193846 - Ver los productos a los que se aplica este artículo
Expandir todo | Contraer todo

En esta página

Resumen

Prioridad de un proceso determina cómo está programada su ejecución por el kernel Win32. Procesos con mayor prioridad se ejecute más rápidamente que los procesos con una prioridad inferior. En este artículo describe cómo modificar la prioridad del proceso de una aplicación de shell.

Más información

Win32 admite las siguientes clases de cuatro prioridad:
  • Inactivo
  • Normal
  • Alta
  • En tiempo real
Inactivo es la prioridad correcta para las aplicaciones de supervisión del sistema o los protectores de pantalla.

Clase de prioridad normal es el predeterminado, que indica un proceso con no necesidades de programación especiales.

Prioridad alta indica un proceso que realiza tareas críticas para el tiempo que requiere la ejecución de inmediata para que se ejecute correctamente. Los subprocesos de un proceso de la clase de prioridad alta adelantan a los subprocesos de procesos de clase de prioridad normal o inactiva. Un ejemplo es la lista de tareas de Windows, que debe responder rápidamente cuando el usuario la llama, independientemente de la carga en el sistema operativo. Tener mucho cuidado al utilizar la clase de prioridad alta, ya que una aplicación enlazada a CPU de clase de prioridad alta puede utilizar disponibles casi todos los ciclos.

La prioridad en tiempo real indica un proceso que tiene la mayor prioridad posible. Los subprocesos de un proceso de clase de prioridad en tiempo real adelantan a los subprocesos de otros procesos, incluidos los procesos del sistema operativo que realizan tareas importantes. Por ejemplo, un proceso en tiempo real que se ejecute durante algo más que un breve intervalo puede hacer que el almacenamiento en caché del disco no se vacíe o que el mouse no responda. Casi nunca se debe utilizar esta prioridad.

Prioridad el proceso se establece mediante la asignación uno de los parámetros de la llamada API CreateProcess.

En el ejemplo siguiente se muestra ejecutando la aplicación Bloc de notas de Windows en Windows NT 4.0 y posterior sistemas operativos de Windows con una prioridad inactiva. La prioridad del proceso se controla mediante la variable 'dwCreationFlags' pasada a CreateProcess(). DEFINEs para las cuatro clases de prioridad compatibles se muestran en la parte superior del programa de ejemplo.

Una vez Notepad.exe se ejecuta, para examinar la prioridad, inicie el Administrador de Windows de tareas, seleccione la ficha procesos, haga clic con el botón secundario del mouse en Notepad.exe y seleccione Establecer prioridad en el menú emergente.

La ruta de acceso completo a Notepad.exe que necesite modificación en la instrucción de asignación de variable 'File2Run'.

Código de ejemplo

   #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
						

Referencias

"Windows avanzadas", páginas de Jeffrey Richter, Microsoft Press, 92-103, tercera edición de 1997, ISBN: 1-57231-548-2

Propiedades

Id. de artículo: 193846 - Última revisión: jueves, 27 de enero de 2005 - Versión: 3.4
La información de este artículo se refiere a:
  • Microsoft Visual FoxPro 3.0b Standard Edition
  • Microsoft Visual FoxPro 5.0 Standard Edition
  • Microsoft Visual FoxPro 5.0a
  • Microsoft Visual FoxPro 6.0 Professional Edition
  • Microsoft Visual FoxPro 7.0 Professional Edition
  • Microsoft Visual FoxPro 8.0 Professional Edition
  • Microsoft Visual FoxPro 9.0 Professional Edition
Palabras clave: 
kbmt kbhowto KB193846 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 193846

Enviar comentarios

 

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