Domanda

Perché è necessaria la dichiarazione PeekMessage prima GetMessage () per la creazione di coda di messaggi?

È stato utile?

Soluzione

Non è richiesto.

Quello che a volte si vede, però, è un filo che non è pronto ad elaborare i messaggi ancora, ma vuole essere in grado di riceverli nella sua coda di messaggi. Nuove discussioni non hanno code di messaggi subito, ma chiamando PeekMessage è sufficiente per creare la coda di messaggi. Si ritorna immediatamente poiché non v'è alcun messaggio, e che permette al filo di continuare a ottenere per sé pronto. Nel frattempo, gli altri thread possono iniziare a fare la coda dei messaggi per il nuovo thread. Una volta che il nuovo thread è pronto, si chiama GetMessage a uno recuperare il primo messaggio dalla coda, o aspettare un messaggio di essere inserito nella coda.

Altri suggerimenti

Non è. Le due funzioni fanno cose diverse.

PeekMessage (...) non aspetta per un messaggio da visualizzare - diventa il primo se è lì, opzionalmente rimuovendolo dalla coda pure, ma ritorna subito falsi non ce n'è uno. E 'più comune nelle applicazioni in cui si sta facendo un po' di elaborazione durante l'attesa per i messaggi, e non si può semplicemente lì sedersi e aspettare per sempre per il messaggio successivo. giochi in tempo reale e come facilmente cadere in questa categoria.

GetMessage (...) attende finchè c'è un messaggio, e lo ottiene. E 'CPUwise più efficiente, perché non è costantemente polling, ma sarà una pausa, se non ci sono messaggi. E 'più comune nelle applicazioni formy e altri programmi che non richiedono costante elaborazione in tempo reale per essere in corso.

Ci sono diverse ragioni per l'utilizzo di PeekMessage prima / invece di GetMessage:

  1. Garantire il programma non si bloccherà fino a quando arriva un messaggio - che è un po 'ridondante, perché è possibile utilizzare direttamente PeekMessage con la bandiera PM_REMOVE per interrogare la coda dei messaggi e lasciare fuori GetMessage del tutto.
  2. Uso della funzione con PM_NOREMOVE e decidere se si desidera elaborare e / o rimuovere il messaggio dalla coda, oppure no.
  3. Calling IsWindowUnicode sulla maniglia della finestra dei messaggi restituiti e selezionando PeekMessageA o PeekMessageW.
  4. Multiple di quanto sopra.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top