C++ 如何杀死chromium嵌入式框架子进程?

C++ 如何杀死chromium嵌入式框架子进程?,c++,chromium-embedded,C++,Chromium Embedded,在PC游戏中,我使用ingame浏览器浏览新闻、虚拟货币商店和社交网络。它是用Chromium嵌入式框架的全新更新构建的。问题是当我打开一个浏览器窗口(网站在那里工作正常)然后关闭时,对于某些网站,CEF子过程没有完成。例如,如果是Youtube视频,我可能还会继续听到音频。我使用屏幕外渲染,不创建其他本机窗口,仅创建子进程。要关闭浏览器窗口,请删除对浏览器的所有引用并调用: m_browser->GetHost()->CloseBrowser(true); 我还尝试了其他方法来关

在PC游戏中,我使用ingame浏览器浏览新闻、虚拟货币商店和社交网络。它是用Chromium嵌入式框架的全新更新构建的。问题是当我打开一个浏览器窗口(网站在那里工作正常)然后关闭时,对于某些网站,CEF子过程没有完成。例如,如果是Youtube视频,我可能还会继续听到音频。我使用屏幕外渲染,不创建其他本机窗口,仅创建子进程。要关闭浏览器窗口,请删除对浏览器的所有引用并调用:

m_browser->GetHost()->CloseBrowser(true);
我还尝试了其他方法来关闭/销毁/完成该渲染子进程,例如在关闭之前加载“about:blank”,但没有任何帮助:进程保持清醒,音频继续播放。 重要提示:这种情况只发生在某些网站上,我认为这些网站使用了某些功能,而其他网站则没有。当我尝试在CEF设置中禁用JavaScript时,错误消失了,但我需要JS

  • 有没有办法强制终止浏览器子进程?(注意GetWindowHandle返回0,因为它没有窗口)
  • 是否有其他方法可以正确终止我不知道的浏览器
  • 网站的哪些功能可能导致此类错误
  • 谢谢大家!

    CEF运行时配置:多进程、单线程消息循环、具有子进程路径、无窗口渲染、无沙箱


    PC配置:OS Windows 8、VS 2010、CR嵌入式框架3.3071、Buffice 1649、C++语言。

    < P>您应该检查OnEndoFunLoad的实现。

    写有关CefBrowserHost::CloseBrowser的内容: 然后,父窗口需要调用CloseBrowser(false)并等待第二个OS close事件,以指示浏览器已允许关闭。如果JavaScript“onbeforeunload”事件处理程序或DoClose()回调取消关闭,则不会发送第二个OS关闭事件

    如果您仍然想终止子进程,我建议您使用浏览器IPC消息并退出应用程序。 在你的比赛中

    CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create(KILL_subprocess);
    m_browser->SendProcessMessage(PID_RENDERER, msg);
    

    如果调用
    CefShutdown()
    ,问题是否仍然存在?
    if (msg->GetName() == KILL_subprocess)
    {
        delete this;
        std::exit(EXIT_FAILURE);
    }