当前位置: 首页 > news >正文

2. cef 及 cefcapi

文章目录

  • 1. CEF(Chromium Embedded Framework)简介
    • 1.1 应用场景
  • 2. cefcapi
  • 3. 进程
  • 4. 线程

1. CEF(Chromium Embedded Framework)简介

CEF由Marshall Greenblatt于2008年创建,基于Chromium项目,提供了一套稳定的API,使开发者能够将高性能的浏览器内核嵌入到桌面应用中。其核心功能包括:

  • HTML5支持:与Chrome浏览器相同的HTML5渲染能力,支持WebGL、WebRTC等现代技术57。

  • 跨平台兼容性:支持Windows、Linux和macOS(部分版本仍在开发中)17。

  • 进程与线程模型:采用Chromium的多进程架构(如Browser进程管理主逻辑,Render进程处理页面渲染),并通过多线程模型保证应用的响应性27。

1.1 应用场景

CEF广泛应用于需要混合Web与本地功能的场景,例如:

  • 桌面应用套壳:如QQ、微信桌面端、网易云音乐, 游戏商城等,通过CEF实现复杂UI与本地逻辑的结合5。
  • 企业工具:数据分析、多媒体播放器等需要嵌入Web内容的专业工具15。
  • 跨平台开发:利用前端技术(HTML/CSS/JS)结合本地API,提升开发效率57。
  • 技术特点:
    • 商业友好授权:采用BSD协议,适合商业化开发5。
    • 多版本支持:CEF3是当前主流版本,支持多线程和复杂交互,逐步替代CEF1/27。
    • 扩展性:允许自定义插件、协议处理、JavaScript绑定等7。

2. cefcapi

libcef 共享库导出一个 C API,将用户与 CEF 运行时和代码库隔离开来。作为二进制版本的一部分,并以源代码形式分发的 libcef_dll_wrapper 项目将这个导出的 C API 包装在 C++ API 中,然后链接到客户端应用程序。此 C/C++ API 转换层的代码由转换工具自动生成。UsingTheCAPI 页面上描述了 C API 的直接使用。

3. 进程

  • CEF3 使用多个进程运行。处理窗口创建、UI 和网络访问的主要进程称为“浏览器”进程。这通常是与主应用程序相同的进程,并且大部分应用程序逻辑将在浏览器进程中运行。Blink 渲染和 JavaScript 执行发生在单独的“渲染”进程中。一些应用程序逻辑,例如 JavaScript 绑定和 DOM 访问,也会在渲染进程中运行。默认进程模型将为每个唯一的来源(方案+域,即URL)生成一个新的渲染进程。其他进程将根据需要产生,例如处理加速合成的“gpu”进程。

  • 默认情况下,主应用程序可执行文件将被多次启动为系统中的独立进程。这是通过传递到 CefExecuteProcess 函数的命令行标志来处理的。如果主应用程序可执行文件很大,加载时间很长,或者不适用于非浏览器进程,可以使用单独的可执行文件。这可以通过 CefSettings.browser_subprocess_path 变量进行配置。有关详细信息,请参阅“应用程序结构”部分。

  • CEF3 生成的独立进程使用进程间通信 (IPC) 进行通信。在浏览器和渲染进程中实现的应用程序逻辑可以通过来回发送异步消息进行通信。渲染进程中的JavaScriptIntegration可以调用位于浏览器进程中的异步 API。有关详细信息,请参阅“进程间通信”部分。

  • 针对特定平台的调试提示也适用于Windows、MacOS和Linux。

4. 线程

  • CEF3 中的每个进程都运行多个线程。有关线程的完整列表,请参阅cef_thread_id_t枚举。这些是一些常用的线程:

  • TID_UI线程是浏览器进程中的主线程。如果使用 CefSettings.multi_threaded_message_loop 值为 false 调用 CefInitialize(),则此线程将与主应用程序线程相同。

  • TID_IO线程用于浏览器进程处理IPC和网络消息。

  • TID_FILE_*线程用于浏览器进程与文件系统交互。阻塞操作只能在该线程或客户端应用程序创建的CefThread上执行。

  • TID_RENDERER线程是渲染器进程中的主线程。所有 Blink 和 V8 交互都必须在此线程上进行。
    由于 CEF 的多线程特性,使用消息传递或锁定来保护数据成员免受多线程访问非常重要。CefPostTask 系列函数支持在线程之间轻松传递异步消息。有关详细信息,请参阅“发布任务”部分。

说明: 上述大部分内容转载和参考自 https://zhuanlan.zhihu.com/p/630130886

相关文章:

  • OB Cloud 云数据库V4.3:SQL +AI全新体验
  • Python训练营打卡——DAY22(2025.5.11)
  • 【计算机网络】网络IP层
  • 【Linux系统】第四节—详解yum+vim
  • OpenCV进阶操作:指纹验证、识别
  • MySQL 数据库集群部署、性能优化及高可用架构设计
  • 鱼眼相机生成-BEV鸟瞰图-入门教程
  • 设计模式简述(十九)桥梁模式
  • Playwright 简介
  • 探索虚拟化:云计算时代的资源优化之道
  • MCP Streamable HTTP 传输层的深度解析及实战分析
  • 前端npm包发布流程:从准备到上线的完整指南
  • 虚拟内存:深入解析与性能优化
  • 5G赋能应急响应:让救援更快、更智能、更精准
  • LeetCode 1550.存在连续三个奇数的数组:遍历
  • Oracle — 内置函数
  • 数据库事务以及JDBC实现事务
  • sql的性能分析
  • 嵌入式硬件篇---CAN
  • 嵌入式硬件篇---UART
  • 国务院关税税则委:调整对原产于美国的进口商品加征关税措施
  • 美国4月CPI同比上涨2.3%低于预期,为2021年2月来最小涨幅
  • 央行等印发《关于金融支持广州南沙深化面向世界的粤港澳全面合作的意见》
  • 母亲节|写给妈妈
  • 竞彩湃|德甲欧冠资格竞争白热化,伯恩茅斯主场迎恶战
  • 马上评丨学术不容“近亲繁殖”