Critérios de suspensão do sistema
Desde que o sistema determine que há atividade de usuário ou aplicativo, ele não entrará em suspensão. O sistema pode detectar determinadas atividades, como entrada do usuário ou comunicações de rede. No entanto, há outras atividades que o sistema não pode detectar. Por exemplo, um aplicativo de apresentação requer a tela para exibição. No entanto, pode parecer que o aplicativo está ocioso durante a apresentação, fazendo com que o sistema desative a exibição.
Para notificar o sistema de que seu aplicativo está ocupado, use a função SetThreadExecutionState . Essa função impede que o sistema entre em suspensão ou desative a exibição enquanto o aplicativo está em execução.
Os aplicativos de apresentação e multimídia devem chamar a função SetThreadExecutionState com ES_DISPLAY_REQUIRED para que o sistema saiba que ele não deve colocar o dispositivo de exibição em suspensão. Os aplicativos de manipulação de eventos, como ferramentas para gerenciar faxes de entrada, devem chamar SetThreadExecutionState com ES_SYSTEM_REQUIRED, manipular o evento e limpar o sinalizador para que o sistema possa voltar à suspensão. Observe que a maioria dos aplicativos de produtividade não precisa usar SetThreadExecutionState porque o sistema geralmente pode determinar a atividade por entrada do usuário.
Para manter o tempo desde a última entrada do usuário, o sistema usa um temporizador ocioso de exibição e um temporizador ocioso do sistema. O sistema compara os temporizadores ociosos com os valores configurados no plano de energia. Se o valor do temporizador ocioso de exibição for maior que o valor de tempo limite de exibição e nenhum thread tiver solicitado a exibição chamando SetThreadExecutionState com ES_DISPLAY_REQUIRED, o sistema desligará a exibição. Da mesma forma, se o temporizador ocioso do sistema for maior que o valor de tempo limite do sistema e nenhum aplicativo tiver solicitado o sistema chamando SetThreadExecutionState com ES_SYSTEM_REQUIRED, o sistema entrará em suspensão.
O sistema mantém uma contagem de aplicativos que chamaram SetThreadExecutionState. O sistema rastreia cada thread que chama SetThreadExecutionState e ajusta o contador adequadamente. Se esse contador atingir zero e não houver nenhuma entrada do usuário, o sistema entrará em suspensão.
Se a energia for baixa, um aplicativo poderá solicitar a intervenção do usuário ou solicitar que o sistema se suspenda. Você pode suspender a operação do sistema usando a função SetSuspendState .
Se o sistema for ativado automaticamente (PBT_APMRESUMEAUTOMATIC), nenhum dos temporizadores será relevante. Para obter mais informações, consulte Eventos de ativação do sistema.
Entrando em suspensão
Quando o sistema entrar em suspensão, ele preservará automaticamente o estado de todo o sistema e de todos os aplicativos. Portanto, a maioria dos aplicativos não precisa executar nenhuma ação especial. Aplicativos que precisam executar ações específicas antes que as transições do sistema possam se registrar para eventos de energia.
Quando o sistema envia um evento PBT_APMSUSPEND , cada aplicativo tem dois segundos para executar as ações necessárias antes que o sistema inicie a transição para suspensão. Os aplicativos devem limitar qual ação eles tomam em resposta a esse evento para garantir que eles concluam todas as operações no tempo alocado.
Tópicos relacionados