Maison  >  Article  >  interface Web  >  Electron produit le client musical QQ - communication entre le processus principal et le processus de rendu

Electron produit le client musical QQ - communication entre le processus principal et le processus de rendu

灭绝师太
灭绝师太original
2021-08-26 17:56:222293parcourir

          Le processus principal d'Electron gère toutes les pages Web et leurs processus de rendu correspondants, et le processus de rendu ne peut gérer que les pages Web correspondantes. Le crash d'un processus de rendu n'affectera pas les autres processus de rendu ; alors, comment les deux processus communiquent-ils ?

Electron produit le client musical QQ - communication entre le processus principal et le processus de rendu

Electron a deux processus : le processus principal et le processus de rendu.

                                                                                                                                                                              . Chaque instance de BrowserWindow exécute la page Web pendant son processus de rendu. Lorsqu'une instance de BrowserWindow est détruite, le processus de rendu correspondant sera également terminé.

2. Le processus principal gère toutes les pages Web et leurs processus de rendu correspondants.染

Processus de rendu

1. Le processus de rendu ne peut gérer que la page Web correspondante. L'effondrement d'un processus de rendu n'affectera pas les autres processus de rendu.

2. Le processus de rendu communique avec le processus principal via IPC pour effectuer des opérations GUI sur la page Web. L'appel d'API locales liées à l'interface graphique directement à partir du processus de rendu est limité en raison de la sécurité et d'éventuelles fuites de ressources.

La communication entre les processus peut être effectuée via le module Inter-Process Communication (IPC) : ipcMain et ipcRenderer

Pour créer une fenêtre, veuillez appeler la classe BrowserWindow, mais elle ne peut être utilisée que dans le processus principal ( main.js ):


    const { BrowserWindow } = require('electron')
    const win = new BrowserWindow()
Pour appeler le processus principal depuis le processus de rendu, veuillez utiliser le module IPC : Par exemple, personnalisez la fonction de fermeture de fenêtre en mode purge fenêtre

     1. 首先由主进程向渲染进程发送消息,告诉它窗口的id(开启了多个渲染进程);

  win.once('ready-to-show', () => {
    win.webContents.send('init_win_id', win.id);
    win.show()
  });

      2.  在渲染进程接收winid,并在关闭窗口时发送给主进程

    //渲染进程监听init_win_id事件(自定义),将winid赋给全局变量winid
    let winid = '';
    require('electron').ipcRenderer.on('init_win_id', (event, message) => {
		winid = message;
    })
    // 关闭窗体
	function closex(){		 
		 //渲染进程里把窗口id发给主进程

		const { ipcRenderer } = require('electron')
		ipcRenderer.send('close_window', winid);
	 
	}

    3. 在主进程中接收需要关闭的渲染进程

    // 主进程获取winid关闭窗体
    ipcMain.on('close_window', (event, arg) => {    
        //app.quit()单个窗口可以直接app.quit()
        //win.close();
        // 1、接收渲染进程发来的窗口id
            let winid = arg;    
            console.log(winid);    
        // 2、通过id找到对应的BrowserWindow对象(win、win22),调用这个对象的close()关闭对应的窗口
            BrowserWindow.fromId(winid).close();
   
        })

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn