cef3集成mfc多文档 会创建crash进程 并且不会退出
时间: 2023-09-01 11:11:17 浏览: 141
如果您在使用集成了 CEF3 和 MFC 的多文档应用程序时遇到了创建了 crash 进程并且不会退出的问题,这可能是因为 CEF3 进程在崩溃后并没有被正确地关闭。
要解决这个问题,您可以尝试使用 CEF3 提供的一些方法来关闭进程。例如,在您的应用程序中使用 `CefRefPtr<CefApp>` 类,并在 `OnBeforeChildProcessLaunch` 方法中设置 `command_line->SetSwitchesDisabled(true)`,这样在 CEF3 进程崩溃后,它将自动关闭。
另外,您还可以在应用程序退出时,手动调用 `CefShutdown()` 方法来关闭 CEF3 进程。这将确保在应用程序退出前,CEF3 进程已经被正确地关闭。
最后,如果您仍然无法解决问题,您可以考虑使用一些工具来检测和诊断进程崩溃的问题。例如,您可以使用 Windows 的进程监视器来查看进程的状态和资源使用情况,从而帮助您找到崩溃的原因。
希望这些信息能够对您有所帮助。如果您有任何其他问题或需要进一步的帮助,请随时提问。
相关问题
cef3集成mfc多文档 会创建crash进程 并程序退出时不会自动退出
如果您在使用集成了 CEF3 和 MFC 的多文档应用程序时遇到了创建了 crash 进程并且程序退出时不会自动退出的问题,这可能是因为 CEF3 进程在崩溃后并没有被正确地关闭。
要解决这个问题,您可以尝试在应用程序退出时手动调用 `CefShutdown()` 方法来关闭 CEF3 进程。此外,您还可以尝试在应用程序退出之前,通过调用 `CefRefPtr<CefApp>` 类的 `OnBeforeChildProcessLaunch` 方法,并在其中设置 `command_line->SetSwitchesDisabled(true)`,来确保在 CEF3 进程崩溃后,它将自动关闭。
如果您仍然无法解决问题,您可以考虑使用一些工具来检测和诊断进程崩溃的问题。例如,您可以使用 Windows 的进程监视器来查看进程的状态和资源使用情况,从而帮助您找到崩溃的原因。
希望这些信息能够对您有所帮助。如果您有任何其他问题或需要进一步的帮助,请随时提问。
cef3集成mfc多文档 详细过程 crash进程没有退出
集成MFC多文档与CEF3的过程大致如下:
1. 创建一个MFC多文档应用程序,包括一个文档类、一个视图类和一个框架窗口类。
2. 下载并集成CEF3库,包括cefclient和libcef.dll等文件。
3. 在框架窗口类中添加一个成员变量`CefRefPtr<CefBrowser> m_browser;`,用于保存CEF浏览器的实例。
4. 在框架窗口类的`OnCreate`函数中创建CEF浏览器实例:
```cpp
CefWindowInfo window_info;
CefBrowserSettings browser_settings;
CefRefPtr<CefClient> client(new CefClientImpl(this)); // CefClientImpl是自定义的实现了CefClient的类
CefBrowserHost::CreateBrowserSync(window_info, client, m_url, browser_settings, NULL);
```
5. 在框架窗口类的`OnSize`函数中调用`m_browser->GetHost()->WasResized()`,以使CEF浏览器跟随窗口大小变化。
6. 在框架窗口类的析构函数中调用`m_browser->GetHost()->CloseBrowser(false);`和`m_browser = NULL;`以关闭CEF浏览器并清理资源。
7. 在框架窗口类的`OnDestroy`函数中调用`CefShutdown()`以释放CEF相关资源。
如果出现crash进程没有退出的情况,可能是由于CEF浏览器的子进程没有正确退出导致的。可以尝试在框架窗口类的析构函数中添加以下代码:
```cpp
CefRefPtr<CefBrowserHost> host = m_browser->GetHost();
if (host)
{
host->CloseBrowser(false);
host->WasResized();
host->NotifyMoveOrResizeStarted();
}
m_browser = NULL;
```
这样可以保证CEF浏览器的子进程正确退出。同时,也可以在程序退出时调用`CefShutdown()`以确保CEF相关资源被正确释放。
阅读全文