Como modificar a prioridade do processo de uma aplicação em shell com Visual FoxPro

Traduções de Artigos Traduções de Artigos
Artigo: 193846 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Prioridade de um processo determina como a respectiva execução está agendada pelo kernel de Win32. Processos com uma prioridade mais alta executado mais rapidamente do que processos com uma prioridade mais baixa. Este artigo descreve como modificar a prioridade do processo de uma aplicação em shell.

Mais Informação

Win32 suporta as seguintes classes de quatro prioridade:
  • Inactivo
  • Normal
  • Alta
  • Tempo real
Inactivo é a prioridade correcta para aplicações de monitorização do sistema ou protecções de ecrã.

Classe de prioridade normal é a predefinição, indicando um processo com não necessidades especiais de agendamento.

Alta prioridade indica um processo que desempenha tarefas críticas do tempo que requer execução imediata para poder funcionar correctamente. Os threads do processo de classe de prioridade alta têm precedência sobre os threads dos processos de classe de prioridade normal ou inactivo. Um exemplo é a lista de tarefas do Windows, que deve responder rapidamente quando chamado pelo utilizador, independentemente da carga do sistema operativo. Cuidado extremo quando utilizar a classe de prioridade alta, dado uma classe de prioridade alta ligados à CPU aplicação pode utilizar ciclos quase disponíveis.

A prioridade de tempo real indica um processo que tem a prioridade mais elevada possível. Os threads de um processo de classe de prioridade em tempo real têm precedência sobre os threads de todos os outros processos, incluindo processos do sistema operativo executar tarefas importantes. Por exemplo, um processo em tempo real que executa para mais do que um intervalo muito breve pode causar caches de disco não limpar ou fazer com que o rato a responder. Quase nunca deve ser utilizada esta prioridade.

Prioridade o processo de é definido, atribuindo um dos parâmetros da chamada de API de CreateProcess.

O exemplo seguinte demonstra a executar a aplicação Bloco de notas do Windows em Windows NT 4.0 e posteriores sistemas operativos com uma prioridade inactiva. A prioridade do processo é controlada pela variável 'dwCreationFlags' transmitida para CreateProcess(). DEFINEs para as quatro classes de prioridade suportados estão listados na parte superior do programa de exemplo.

Uma vez Notepad.exe está em execução, para examinar a prioridade, inicie o Gestor de tarefas do Windows, seleccione o separador processos, clique com o botão direito do rato Notepad.exe e seleccione 'Definir prioridade' do menu de contexto.

O nome de caminho totalmente qualificado para Notepad.exe necessitar de modificação na instrução de atribuição de variável 'File2Run'.

Exemplo de código

   #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
						

Referências

"Avançadas Windows", páginas de Jeffrey Richter, a Microsoft Press, 92-103, terceira edição de 1997, ISBN: 1-57231-548-2

Propriedades

Artigo: 193846 - Última revisão: 27 de janeiro de 2005 - Revisão: 3.4
A informação contida neste artigo aplica-se 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
Palavras-chave: 
kbmt kbhowto KB193846 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 193846

Submeter comentários

 

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