Meldingen vranglåser

En tråd som kaller SendMessage -funksjonen til å sende en melding til en annen tråd kan ikke fortsette utfører til returnerer vindusprosedyre som mottar meldingen. Hvis du mottar tråden gir kontroll under behandling av meldingen, kan ikke sender tråden fortsette utfører, fordi de venter SendMessage å gå tilbake. Hvis du mottar tråden deretter sender en melding til kallende tråden når den er sperret, kan det føre til vranglås.

Legg merke til at den mottakende tråden ikke må gir kontroll eksplisitt; ringe noen av følgende funksjoner, kan det føre til at en tråd å gi kontroll implisitt.

DialogBox
DialogBoxIndirect
DialogBoxIndirectParam
DialogBoxParam
GetMessage
MessageBox
PeekMessage

Hvis du vil unngå potensielle vranglåser, kan du vurdere å bruke funksjonene SendNotifyMessage eller SendMessageTimeout . Ellers kan en vindusprosedyre avgjøre om en melding som den har mottatt ble sendt av en annen tråd ved å kalle InSendMessage -funksjonen. Før du ringer noen av funksjonene i den forrige listen under behandling av en melding, må vinduet prosedyren først kalle InSendMessage. Hvis denne funksjonen returnerer SANN, må vinduet prosedyren kalle funksjonen ReplyMessage før noen funksjon som fører til at tråden å gi kontroll.

Index