Pregunta

¿Por qué es necesaria la declaración PeekMessage antes GetMessage () para crear la cola de mensajes?

¿Fue útil?

Solución

No es necesario.

Lo que a veces se verá, sin embargo, es un hilo que no está listo para procesar mensajes todavía, sino que quiere ser capaz de recibirlos en su cola de mensajes. Nuevos temas no tienen colas de mensajes de inmediato, pero llamar PeekMessage es suficiente para crear la cola de mensajes. Se vuelve inmediatamente ya que no hay mensaje, y que permite que el hilo para continuar recibiendo en sí listo. Mientras tanto, otros hilos pueden empezar a hacer cola los mensajes para el nuevo hilo. Una vez que el nuevo hilo está listo, se llama GetMessage ya sea para recuperar el primer mensaje de la cola, o esperar a que un mensaje se pone en la cola.

Otros consejos

No es. Las dos funciones hacen cosas diferentes.

PeekMessage (...) no espera a que aparezca un mensaje - se pone el primero si está allí, opcionalmente, retirar de la cola, así, pero vuelve inmediatamente falsas no hay uno. Es más común en las aplicaciones donde se está haciendo algún tipo de procesamiento a la espera de mensajes, y no puede simplemente sentarse y esperar por siempre para el siguiente mensaje. juegos en tiempo real y tal caer fácilmente en esta categoría.

GetMessage (...) espera hasta que hay un mensaje, y lo consigue. Es CPUwise más eficiente, porque no es constante de votación, pero se detendrá si no hay ningún mensaje. Es más común en las aplicaciones Formy y otros programas que no requieren procesamiento en tiempo real constante de estar pasando.

Hay varias razones para el uso PeekMessage antes de / en lugar de GetMessage:

  1. Asegurar que el programa no va a pasar hasta que llegue un mensaje - que es un poco redundante, porque se puede utilizar directamente PeekMessage con la bandera PM_REMOVE para sondear la cola de mensajes y dejar de lado GetMessage por completo.
  2. Uso de la función con PM_NOREMOVE y decidir si desea procesar y / o eliminar el mensaje de la cola, o no.
  3. Llamando IsWindowUnicode el identificador de ventana los mensajes devueltos y seleccionando PeekMessageA o PeekMessageW.
  4. múltiple de los anteriores.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top