Wie kann der Crom Embedded Framework Subprozess beendet werden?

9

in einem PC-Spiel habe ich ingame Browser für Nachrichten, virtuelle Währung Shop und soziale Netzwerke verwendet. Es ist mit ziemlich frischem Update von Chromium Embedded Framework gebaut. Das Problem ist, wenn ich ein Browserfenster öffne (Website funktioniert dort gut) und dann schließen, für bestimmte Websites CEF-Unterprozess nicht beendet. Ich kann auch weiterhin Audio hören, wenn es zum Beispiel Youtube Video ist. Ich verwende Offscreen-Rendering, andere native Windows werden nicht erstellt, nur Teilprozesse. Um das Browserfenster zu schließen, entferne ich alle Referenzen auf CefBrowser und rufe:

%Vor%

Ich habe auch andere Möglichkeiten ausprobiert, um den Render-Subprozess zu schließen / zu zerstören / finalisieren, wie das Laden von "about: blank" vor dem Schließen, aber das war keine Hilfe: Der Prozess blieb wach, der Ton wurde weiter abgespielt. Wichtiger Hinweis: Es passiert nur auf bestimmten Websites, von denen ich vermute, dass sie einige Funktionen nutzen, andere nicht. Als ich versuchte, JavaScript in den CEF-Einstellungen zu deaktivieren, verschwand der Fehler, aber ich brauche JS.

  1. Gibt es eine Möglichkeit, den Browser-Subprozess zu beenden? (Beachten Sie, dass GetWindowHandle 0 zurückgibt, weil es kein Fenster hat)
  2. Gibt es eine andere Möglichkeit, den Browser korrekt zu beenden, den ich nicht kenne?
  3. Welche Funktion der Websites kann einen solchen Fehler verursachen?

Danke!

CEF-Laufzeitkonfiguration: Multi-Prozess, Single-Thread-Nachrichtenschleife, mit Subprozess-Pfad, fensterloses Rendering, keine Sandbox.

PC-Konfiguration: Betriebssystem Windows 8, VS 2010, Chromium Embedded Framework Version 3.3071, Build 1649, C ++ - Sprache.

    
Juster 01.09.2017, 13:00
quelle

2 Antworten

0

Sie sollten Ihre Implementierung von onbeforeunload überprüfen.

CEF GeneralUsage schreibt über CefBrowserHost :: CloseBrowser: Das übergeordnete Fenster muss dann CloseBrowser (false) aufrufen und auf ein zweites OS-close-Ereignis warten, um anzuzeigen, dass der Browser das Schließen zugelassen hat. Das zweite Ereignis zum Schließen des Betriebssystems wird nicht gesendet, wenn das Schließen durch einen JavaScript-Ereignishandler 'onbeforeunload' oder den Rückruf 'DoClose ()' abgebrochen wird.

Und wenn Sie den Unterprozess immer noch beenden möchten, , würde ich vorschlagen, dass Sie die IPC-Nachricht des Browsers verwenden und in der App beenden. Bei deinem Spiel führe

%Vor%

und am Unterprozess implementieren "OnProcessMessageReceived":

%Vor%     
hamavreg 18.01.2018 12:39
quelle
0
%Vor%     
vijay joshi 11.09.2017 05:02
quelle

Tags und Links