electron 两个渲染进程之间通信
一、使用主进程作为中介
使用主进程作为中介相对较为灵活,但可能会增加主进程的负担
1. 从一个渲染进程向主进程发送消息
在发送消息的渲染进程中,可以使用 ipcRenderer 模块向主进程发送消息。例如:
const { ipcRenderer } = require("electron");ipcRenderer.send("custom-event", "message from renderer 1");
2. 主进程接收并转发消息
在主进程中,可以使用 ipcMain 模块接收消息并转发给另一个渲染进程。例如:
const { ipcMain } = require("electron");ipcMain.on("custom-event", (event, message) => {// 查找目标窗口并发送消息const webContents = event.sender;const targetWindow = BrowserWindow.fromWebContents(webContents);targetWindow.webContents.send("custom-event", message);});
3. 接收消息的渲染进程接收消息:
在接收消息的渲染进程中,可以使用 ipcRenderer 模块接收主进程转发的消息。例如:
const { ipcRenderer } = require("electron");ipcRenderer.on("custom-event", (event, message) => {console.log(`Received message: ${message}`);});
二、使用 localStorage 或 sessionStorage 进行简单通信
使用存储进行通信较为简单,但只适用于简单的数据传递
1. 一个渲染进程写入数据
在一个渲染进程中,可以使用 localStorage 或 sessionStorage 来存储数据,例如:
localStorage.setItem("sharedData", "message from renderer 1");
2. 另一个渲染进程读取数据
在另一个渲染进程中,可以读取存储的数据,例如:
const data = localStorage.getItem("sharedData");console.log(`Received data: ${data}`);
三、使用 BroadcastChannel 进行通信
使用 BroadcastChannel 可以实现直接的通信,但需要注意兼容性问题。
1. 创建 BroadcastChannel
在两个渲染进程中,可以创建一个 BroadcastChannel 实例,并使用相同的频道名称。例如:
const channel = new BroadcastChannel("my-channel");
2. 发送消息
在一个渲染进程中,可以使用`postMessage`方法发送消息,例如:
channel.postMessage("message from renderer 1");
3. 接收消息
在另一个渲染进程中,可以通过监听`message`事件来接收消息,例如
channel.addEventListener("message", (event) => {console.log(`Received message: ${event.data}`);});
相关文章:
electron 两个渲染进程之间通信
一、使用主进程作为中介 使用主进程作为中介相对较为灵活,但可能会增加主进程的负担 1. 从一个渲染进程向主进程发送消息 在发送消息的渲染进程中,可以使用 ipcRenderer 模块向主进程发送消息。例如: const { ipcRenderer } require(&qu…...
配置ROS环境
1.检测环境变量 运行printenv | grep ROS命令,有如下返回值则表示环境变量配置正确: ROS_ROOT/opt/ros/kinetic/share/ros ROS_PACKAGE_PATH/opt/ros/kinetic/share ROS_MASTER_URIhttp://localhost:11311 ROSLISP_PACKAGE_DIRECTORIES ROS_DIST…...
力扣 128. 最长连续序列
题目描述 我的思路 我的思路比较暴力,就是首先将数组从小到大进行排序,然后再依次遍历判断序列是否连续并时时更新连续序列的最长长度。比如示例1:nums [100, 4, 200, 1, 3, 2],第一步先将数组进行排序得到sort_nums [1, 2, 3,…...
Stable Diffusion AI绘画工具的安装与配置(MAC用户)
AI绘画的热潮席卷了整个创意行业,Stable Diffusion作为其中的翘楚,让艺术创作变得前所未有的简单。然而,对于使用Mac电脑用户来说,安装和配置Stable Diffusion可能显得有些棘手。别担心,这份详细的教程将手把手教你如何…...
flowable源码解读——并行多实例节点任务是否是顺序生成
最近在项目开发中需要在多实例开始监听里修改一个全局的计数变量,不太确定并行多实例任务在底层引擎是顺序生成还是并行生成的,如果是顺序生成的则不影响,如果是并行生成 则修改一个全局的计数变量就会出现数据错误问题,查阅了flo…...
【机器学习】AGI的基本概念、技术挑战和应用前景
引言 AGI是指机器能够完成人类能够完成的任何智力任务的能力 文章目录 引言一、什么是AGI1.1 AGI,Artificial General Intelligence(通用人工智能)1.2 AGI的定义和标准1.3 AGI的发展 二、AGI的技术挑战2.1 理解人类智能2.2 认知复杂性2.3 自主…...
flink 使用RocksDB作为状态后端
RocksDB flink在生产环境中常用RocksDB作为状态后端 1、subtask在taskmanager中作为一个线程运行,如果设置了RocksDB状态后端,RocksDB也会启动一个独立的线程,供subtask来使用。 2、RocksDB是一个kv数据库,因此只能存储flink的键…...
【运维高级内容--MySQL】
目录 一、mysql安装 二、MySQL主从复制 一、mysql安装 yum install cmake gcc-c openssl-devel ncurses-devel.x86_64 rpcgen.x86_64 #安装依赖性 #在root路径下下载mysql-boost-5.7.44、libtirpc-devel-1.3.3-8.el9_4.x86_64.rpm安装包 yum install libtirpc-devel…...
【仿真与实物设计】基于51单片机设计的打地鼠游戏机——程序源码原理图proteus仿真图PCB设计文档演示视频元件清单等(文末工程资料下载)
基于51单片机设计的打地鼠游戏机 演示视频: 基于51单片机设计的打地鼠游戏机 功能描述:使用 51单片机为核心制作一个打地鼠游戏机。按下启动开关,8盏LED流水点亮并闪烁2次,随即开始播放游戏音乐,直到开始选择模式。选…...
iPhone设备使用技巧:忘记密码的情况下如何解除iOS 18/17屏幕时间
我们给了儿子一部新手机。在尝试擦除旧手机上的所有内容并恢复出厂设置时,它要求提供 4 位屏幕时间密码。我已经尝试了我们会使用的所有可能性,但无法弄清楚。我们如何绕过这个问题或将手机恢复出厂设置以便我们可以出售它? Apple 社区 对于…...
内网渗透的风行者—Yasso
Yasso : Yasso,让内网渗透变得简单而高效。- 精选真开源,释放新价值。 概览 Yasso是由sairson精心打造的内网渗透辅助工具集,它为网络安全专家和渗透测试人员提供了一个功能强大的工作平台。在面对错综复杂的网络环境时ÿ…...
Android13 app后台无法启动Abort background activity starts from
总纲 android13 rom 开发总纲说明 目录 1.前言 2.log分析 3.代码查找分析 4.修改方法 5.编译测试 6彩蛋 1.前言 Android13 用户app后台无法启动,提示Abort background activity starts from 10111 2.log分析 08-07 21:37:36.703: W/ActivityTaskManager(440): Back…...
Day45 | 99.岛屿数量 深搜 广搜 100.岛屿的最大面积
语言 Java 99.岛屿数量 深搜 广搜 99. 岛屿数量 题目 题目描述 给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可…...
css之grid布局(网格布局)
简述: 网格布局顾名思义就是将元素呈现为网状的整齐布局 简单使用: <div><div class"test"><div class"item">1</div><div class"item">2</div><div class"item">…...
数据可视化大屏模板-美化图表
Axure作为一款强大的原型设计软件,不仅擅长构建交互式界面,更在数据可视化方面展现出了非凡的创意与实用性。今天,就让我们一起探索Axure设计的几款精美数据可视化大屏模板,感受数据之美。 立体图表的视觉冲击力 Axure的数据可视…...
【与C++的邂逅】--- 类和对象(中)
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: 与C的邂逅 本篇博客我们将学习类和对象中,认识类的六个默认成员函数以及实现日期类。下图为本节思维导图。 🏠 类的6个默认成员函…...
[数据集][目标检测]瞳孔虹膜检测数据集VOC+YOLO格式8768张2类别
数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8768 标注数量(xml文件个数):8768 标注数量(txt文件个数):8768 标注…...
Day42 | 739. 每日温度 496.下一个更大元素 I 503.下一个更大元素II
语言 Java 739. 每日温度 每日温度 题目 给定一个整数数组 temperatures ,表示每天的温度,返回一个数组 answer ,其中 answer[i] 是指对于第 i 天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该…...
运维大规模K8S集群注意事项
序言 闲来无事,一片混沌,想不清思不断,改变好像来自于各个方面,有的时候是内部的冲突,有的时候是外部的竞争,然而,大部分情况下,一旦错过,就已经没得选了。 尴尬的处境&a…...
供应链系统源码的关键技术是什么?
供应链管理是企业运营中的重要环节,而高效的供应链系统能够大幅提升企业的竞争力。在数字化转型的过程中,越来越多的企业选择使用开源供应链系统源码来定制开发适合自身需求的解决方案。那么,供应链系统源码的关键技术有哪些?本文…...
第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...
Cursor实现用excel数据填充word模版的方法
cursor主页:https://www.cursor.com/ 任务目标:把excel格式的数据里的单元格,按照某一个固定模版填充到word中 文章目录 注意事项逐步生成程序1. 确定格式2. 调试程序 注意事项 直接给一个excel文件和最终呈现的word文件的示例,…...
基于大模型的 UI 自动化系统
基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Axios请求超时重发机制
Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
初学 pytest 记录
安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...
