当前位置: 首页 > 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

http://www.xdnf.cn/news/395713.html

相关文章:

  • 全国青少年信息素养大赛 Python编程挑战赛初赛 内部集训模拟试卷七及详细答案解析
  • Qt开发经验 --- 避坑指南(13)
  • 梦熊联盟:202505基础语法-题解
  • 沐言智语开源Muyan-TTS模型,词错率、语音质量评分都处于开源模型的一线水平,推理速度相当快~
  • Go语言运算符详解
  • No module named ‘xxx’报错原因及解决方式
  • DedeCMS-Develop-5.8.1.13-referer命令注入研究分析 CVE-2024-0002
  • css背景相关
  • 【大模型】解决最新的Dify1.3.1版本 无法基于Ollama成功添加模型
  • 进程间关系与守护进程
  • Quantum convolutional nerual network
  • 责任链模式
  • 苍穹外卖(数据统计–Excel报表)
  • C语言常见的文件操作函数总结
  • 互联网大厂Java求职面试:电商商品推荐系统中的AI技术应用
  • 超标量处理器设计4-分支预测
  • TypeScript 装饰器高级用法详解
  • Kubernetes排错(十四):Pod状态异常排查手册
  • 深入理解 TypeScript 中 unknown 类型:安全性与使用指南
  • 深度学习:系统性学习策略(二)
  • OBS studio 减少音频中的杂音(噪音)
  • LLM初识
  • 【CTF】Linux Shell RCE绕过(bypass)技术总结
  • 【Tools】VScode远程调试linux服务器(打断点可视化界面方式)
  • 【文本数据找重复记录】2021-11-23
  • C++编程中,什么是野指针?
  • SpringBoot3.0 分组校验
  • jsAPI
  • Docker 部署Nexus仓库 搭建Maven私服仓库 公司内部仓库
  • BI PaaS化实践:衡石如何通过可插拔数仓加速企业数据湖仓一体?