Pergunta

Por que a declaração PeekMessage é necessária antes do getMessage () para criar a fila de mensagens?

Foi útil?

Solução

Não é necessário.

O que às vezes você verá, no entanto, é um tópico que ainda não está pronto para processar mensagens, mas deseja recebê -las em sua fila de mensagens. Novos tópicos não têm filas de mensagem imediatamente, mas chamando PeekMessage é suficiente para criar a fila de mensagens. Ele retorna imediatamente, pois não há mensagem, e isso permite que o thread continue se preparando. Enquanto isso, outros threads podem iniciar mensagens de fila para o novo thread. Depois que o novo tópico estiver pronto, ele liga GetMessage Para recuperar a primeira mensagem da fila ou esperar que uma mensagem seja colocada na fila.

Outras dicas

Não é. As duas funções fazem coisas diferentes.

PeekMessage (...) não espera que uma mensagem apareça - recebe a primeira se estiver lá, opcionalmente, removendo -a da fila também, mas retorna false imediatamente, não é um. É mais comum em aplicativos em que você está fazendo algum processamento enquanto aguarda mensagens e não pode simplesmente ficar sentado e esperar para sempre pela próxima mensagem. Jogos em tempo real e tão facilmente se enquadram nessa categoria.

GetMessage (...) espera até que haja uma mensagem e entenda. É mais eficiente, porque não está constantemente pesquisando, mas fará uma pausa se não houver mensagens. É mais comum em aplicativos de formação e outros programas que não exigem processamento constante em tempo real.

Existem várias razões para usar PeekMessage antes/em vez de GetMessage:

  1. Garantir que o programa não pendure até que uma mensagem chegue - isso é um pouco redundante, porque você pode usar diretamente PeekMessage com o PM_REMOVE bandeira para pesquisar a fila de mensagens e deixar de fora GetMessage completamente.
  2. Usando a função com PM_NOREMOVE e decidindo se você deseja processar e/ou remover a mensagem da fila, ou não.
  3. Chamando IsWindowUnicode na alça da janela das mensagens retornadas e selecionando PeekMessageA ou PeekMessageW.
  4. Múltiplos dos itens acima.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top