Lieber Support,
Erstmal die Situation:
Windows 11 (das Problem gab es aber schon unter Windows 10)
Xbase++ (ohne das Xbp*-GUI, bei mir synchrones WIN32 mit Standard-Messageloop.)
IllDataProvider für Datenbereitstellung.
Datenanzeige im Viewer.
Erstes Symptom: Die Benutzeroberfläche friert während der Datenausgabe ein.
Das Problem tritt häufig auf, manchmal behebt es sich nach wenigen Sekunden von selber.
Manchmal aber auch nicht.
Debuggen zeigt mir dann, dass mein Thread sich entweder in LLPrintEnd oder LLPrint befindet. Die Prozess-CPU steigt auf ca. 4% (mehr kriegt der Prozess bei mir nicht) und wenn man mit dem Process Explorer in die Details geht, sieht man, dass zwei Threads sich diese 4% ca 50:50 teilen. Einer der beiden wildgewordenen Threads startete bei “win32kfull.sys+0x406dd2” und der andere bei “cmll31.dll!LlXOBStatJobOpen+0x415bc0”.
Diese beiden Threads ziehen dauerhaft soviel CPU, dass ein zusätzlicher Debug-Thread, der normalerweise alle zwei Sekunden die Speichersituation (OutputDebugString) ausgibt, nichts mehr ausgibt.
Hier kann man das Programm stehen lassen, es geht einfach nicht weiter. Klickt man aber auf das Top-Level-Fenster einer anderen Appplikation, startet die L&L-Applikation wieder und läuft dann in der Regel bis zum Schluss durch, als wäre nichts gewesen.
Habe ich einen MessageFilter registriert, der auf einen Hotkey reagieren soll, dann funktioniert der Hotkey in der Stillstandssituation auch nicht. Das heißt, L&L dispatcht bei diesem Stillstand keine Messages. Habe ich den Hotkey gedrückt (zunächst ohne Reaktion) und klicke dann in eine andere Applikation, dann wird sofort mein MessageFilter von L&L gerufen und mein Hotkey-Reaktions-Dialog erscheint. Im Callstack sieht man dann, dass der Aufruf aus LLPrintEnd/LLPrint kommt. Das heißt, L&L dispatcht dann wieder Messages.
Leider bin ich nicht im Stande zu sehen, was der L&L Thread mit dem O/S Thread hier zu schaffen hat und deswegen brauche ich Ihre Hilfe. Ich habe schon Stunden reingesteckt, das Problem selber in den Griff zu kriegen. PostMessage, AttachThreadInput, Message-Loop vorher, Message-Loop nachher, … you name it. Aber alles vergebens.
Das Problem tritt nicht nur im Viewer auf. Im Designer in der Voransicht passiert das Gleiche.
Anbei ein Screenshot-Ausschnitt der Threadsituation bei so einem Hänger.
Vielen Dank und beste Grüße
Michael Hoffmann
