mfc多文档视图 集成cef3 启动为什么会有两个进程
时间: 2024-02-05 17:04:26 浏览: 77
当集成 CEF3 到 MFC 多文档视图应用程序中时,启动时会有两个进程,这是因为 CEF3 架构采用了多进程模型。其中一个进程是浏览器进程,用于处理浏览器相关的任务,例如网络请求、JavaScript 执行、渲染页面等。另一个进程是渲染进程,用于渲染页面和处理与页面相关的任务,例如 DOM 操作、事件处理等。这种多进程模型可以提高浏览器的稳定性和安全性,同时也可以提高浏览器的性能。
相关问题
mfc多文档视图 集成cef3 启动能设置只有一个进程吗
在 MFC 多文档视图应用程序中,集成 CEF3 启动时只能有一个浏览器进程,但可以有多个渲染进程。在启动时,可以通过 `CefSettings` 结构体中的 `multi_threaded_message_loop` 和 `external_message_pump` 属性来设置浏览器进程的类型,如果将 `multi_threaded_message_loop` 属性设置为 `false`,则浏览器进程会在一个单独的线程中运行,而不是在主线程中运行,这样可以避免浏览器进程阻塞主线程。如果将 `external_message_pump` 属性设置为 `true`,则浏览器进程将使用外部的消息循环(例如 MFC 消息循环),而不是使用内部的消息循环。这些设置可以在 `CefMainArgs` 和 `CefInitialize` 方法中设置。但无论如何,CEF3 架构都是采用多进程模型的,因此至少会有一个浏览器进程和一个渲染进程。
mfc多文档视图集成cef3 集成过程
以下是在 MFC 多文档视图应用程序中集成 CEF3 的基本步骤:
1. 下载 CEF3 库
您可以从 CEF 官方网站下载 CEF3 库。选择与您的操作系统和编译器相对应的版本并下载。
2. 创建 MFC 多文档视图应用程序
使用 Visual Studio 创建一个 MFC 多文档视图应用程序。
3. 集成 CEF3
将 CEF3 库文件复制到您的项目目录中。然后,在您的项目中添加以下头文件:
```cpp
#include "include/cef_app.h"
#include "MfcCefView.h" // CEF3 视图类
```
接下来,在您的应用程序类中添加以下成员变量:
```cpp
CefRefPtr<MfcCefBrowserApp> m_cefBrowserApp; // CEF3 应用程序类
```
然后,您需要初始化 CEF3 应用程序类。在您的应用程序类的 `InitInstance` 函数中添加以下代码:
```cpp
// 初始化 CEF3 应用程序类
CefSettings settings;
CefRefPtr<CefApp> app(new MfcCefBrowserApp);
CefInitialize(settings, app, NULL);
m_cefBrowserApp = static_cast<MfcCefBrowserApp*>(app.get());
```
在您的应用程序类的析构函数中,添加以下代码:
```cpp
// 关闭 CEF3 应用程序类
if (m_cefBrowserApp) {
m_cefBrowserApp->OnBeforeCommandLineProcessing(nullptr);
CefShutdown();
}
```
最后,在您的视图类中添加以下代码来创建 CEF3 视图:
```cpp
// 创建 CEF3 视图
CefRefPtr<MfcCefBrowserApp> cefBrowserApp =
static_cast<MfcCefBrowserApp*>(AfxGetApp());
CefWindowInfo windowInfo;
windowInfo.SetAsChild(GetSafeHwnd(), GetClientRect());
CefBrowserSettings browserSettings;
CefRefPtr<CefClient> client(new MfcCefClient(this));
CefBrowserHost::CreateBrowserSync(windowInfo, client, url, browserSettings, nullptr, nullptr);
```
这些是基本步骤,您可以根据您的具体需求进行更改和扩展。同时,您需要确保正确地包含和链接 CEF3 库文件。希望这可以对您有所帮助。
阅读全文