O conjunto de trabalho de um aplicativo é cortado quando sua janela de nível superior é minimizada

Traduções deste artigo Traduções deste artigo
ID do artigo: 293215 - Exibir os produtos aos quais esse artigo se aplica.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Quando estiver minimizada janela de nível superior do aplicativo através do comando Minimizar no seu menu de sistema ou um clique no respectivo botão Minimizar , o sistema operacional será aparar o conjunto de trabalho para o processo. Isso é feito para liberar mais memória RAM para aplicativos de primeiro plano. Como resultado dessa restrição, um processo pode enfrentar desempenho é significativamente inferior porque estão sendo falha suas páginas de memória RAM de volta.

Mais Informações

Se um aplicativo minimiza a janela de nível superior programaticamente chamando a API ShowWindow() com o comando SW_MINIMIZE, o conjunto de trabalho do processo será cortado. No entanto, o trabalho definido será não ser cortado quando a janela está minimizada programaticamente por meio do uso de ShowWindow() com o comando SW_SHOWMINIMIZED.

O conjunto de trabalho de um processo é o conjunto de páginas de memória visíveis no momento para o processo na RAM física. O acesso a essa memória é muito rápido porque as páginas são residentes e disponíveis para um aplicativo para usar sem acionar uma falha de página.

Um processo pode aparar explicitamente seu próprio trabalho conjunto chamando a API SetProcessWorkingSetSize() passando "-1" para o dwMinimumWorkingSetSize e dwMaximumWorkingSetSize parâmetros. Isso é basicamente como o sistema apara o processo quando sua janela de nível superior é minimizada. Isso não significa que as páginas de memória usadas pelo processo são descartadas imediatamente da RAM. Na verdade, essas páginas podem permanecer residentes por bastante tempo. Eles simplesmente são sinalizados para que o sistema pode usá-las para outros processos conforme necessário. Isso é significativamente mais rápido que espera no algoritmo de remoção padrão do sistema.

Quando uma janela está minimizada através do comando Minimizar no seu menu de sistema ou no botão Minimizar , a janela é enviada uma mensagem WM_SYSCOMMAND com o comando SC_MINIMIZE. Se o procedimento de janela passar essa mensagem no procedimento de janela padrão do sistema por DefWindowProc() chamada, o procedimento padrão tratará a mensagem por chamada ShowWindow() com o comando SW_MINIMIZE. Como mencionado anteriormente, isso fará com que o processo de trabalho definido para ser cortado.

Você pode escrever um aplicativo que pode ser minimizado sem ter que seu conjunto de trabalho cortado. Para fazer isso, o procedimento de janela para a janela de nível superior deve interceptar a mensagem WM_SYSCOMMAND e responder ao comando SC_MINIMIZE por chamada ShowWindow() diretamente com o comando SW_SHOWMINIMIZED. Ele não deve passar o comando SC_MINIMIZE para DefWindowProc().

Código de exemplo

O código a seguir demonstra como gravar um procedimento de janela que intercepta a mensagem WM_SYSCOMMAND para ignorar o procedimento de janela padrão e impedir que o conjunto de trabalho do processo que está sendo cortada:
LRESULT CALLBACK WndProc (HWND hWnd, UINT iMsg, WPARAM wParam, 
      LPARAM lParam) {

   switch (iMsg) {

      case WM_SYSCOMMAND:
         if (wParam == SC_MINIMIZE) {

            // programmatically minimize the window
            ShowWindow(hWnd, SW_SHOWMINIMIZED);

            // do not pass the minimize command on to the system's
            // default window procedure
            return 0;
         }

         // allow other system commands to be passed on to the
         // default window procedure
         break; 

      // handle other window messages here...
      case WM_WHATEVER:
         break;
   }

   return DefWindowProc(hWnd, iMsg, wParam, lParam);
}
				

Propriedades

ID do artigo: 293215 - Última revisão: terça-feira, 21 de novembro de 2006 - Revisão: 5.1
A informação contida neste artigo aplica-se a:
  • Interface de Programação de Aplicativos do Microsoft Win32 nas seguintes plataformas
    • Microsoft Windows NT 4.0
    • the operating system: Microsoft Windows 2000
    • the operating system: Microsoft Windows XP
Palavras-chave: 
kbmt kbapi kbkernbase kbmemory kbprb KB293215 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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 293215

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