Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beschreibt ein Szenario, in dem ein Eingabemethoden-Editor (INPUT Method Editor, IME) abstürzt, während eine von einem anderen Thread gesendete Fensternachricht verarbeitet wird und in dem die Fensterprozedur die Nachricht verarbeitet, zImmSetOpenStatus
. B. eine Imm*
Funktion aufruft.
Problembeschreibung
Eine Anwendung mit einem IME stürzt unter einer der folgenden Bedingungen ab:
- Ein Benutzeroberflächenthread ruft die
TranslateMessage
Funktion als Teil der Nachrichtenschleife auf. - Ein anderer Thread sendet eine Fensternachricht an ein Fenster im Besitz des UI-Threads.
- Die Fensterprozedur, die die vom anderen Thread gesendete Fensternachricht verarbeitet, ruft eine
Imm*
Funktion auf, zImmSetOpenStatus
. B. .
Ursache
Ein in Windows 10 enthaltener IME kann die PeekMessage
Funktion aufrufen, wenn der IME von der TranslateMessage
Funktion aufgerufen wird, um eine Tastatureingabe zu verarbeiten. PeekMessage
verarbeitet alle ausstehenden Fenstermeldungen, die von anderen Threads gesendet werden. Dies kann zu einem Reentrancy-Problem führen, wenn die Fensterprozedur, die die gesendete Nachricht verarbeitet, eine Imm*
Funktion aufruft und den IME in einem unerwarteten Zustand verlässt.
Problemumgehung
Vermeiden Sie das Aufrufen von Imm*
Funktionen, während der IME eine andere Fenstermeldung verarbeitet.
Weitere Informationen
Die PeekMessage
Dokumentation enthält Folgendes:
Während dieses Aufrufs liefert das System ausstehende und nicht in die Warteschlange eingereihte Nachrichten, die an Fenster gesendet werden, die im Besitz des aufrufenden Threads sind, mit der SendMessage
, SendMessageCallback
, SendMessageTimeout
oder SendNotifyMessage
Funktion. Die erste Nachricht in der Warteschlange, die dem angegebenen Filter entspricht, wird abgerufen. Das System kann auch interne Ereignisse verarbeiten. Wenn kein Filter angegeben ist, werden Nachrichten in dieser Reihenfolge verarbeitet:
- Gesendete Nachrichten
- Gepostete Nachrichten
- Eingabemeldungen (Hardware) und interne Systemereignisse
- Gesendete Nachrichten (erneut)
WM_PAINT
NachrichtenWM_TIMER
Nachrichten
Notiz
Gesendete Fensternachrichten sind nicht in die Warteschlange eingereihte Nachrichten. Der beim Aufrufen des PeekMessage-Anrufs angegebene Nachrichtenfilter gilt nicht für gesendete Nachrichten.