英文:
Call of function from main.js in render process in electron js for multithreading
问题
我尝试在ElectronJS上创建多线程应用程序,但以前从未使用过,遇到了与线程相关的问题。我使用了threads.js(https://www.npmjs.com/package/threads)来实现多线程,而不是默认的Worker,当我调用sendFile()时,它可以在main.js中正常工作。我在main.js中有一个方法,它创建工作线程并从线程中获取结果。
sendFile = async (text) => {
    const send = await spawn(new Worker('./src/service/sender.js'));
    const result = await send(text);
    console.log(result);
    await Thread.terminate(send);
}
package.json
{
  "name": "XXXXX",
  "version": "1.0.0",
  "description": "XXXXXXX",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "",
  "license": "ISC",
  "browser": {
    "fs": false
  },
  "dependencies": {
    "@electron/remote": "^2.0.9",
    "electron": "^24.3.1",
    "md5-file": "^5.0.0",
    "threads": "^1.7.0"
  }
}
如何在渲染块中使用这个方法?
英文:
I try to create multithreading application on ElectronJS but I've never been used it before and stack into problem with threads.
I used threads.js https://www.npmjs.com/package/threads for multithreading instead of default worker and it good work from main.js when I call sendFile()
I have method in main.js witch create worker and get result from thread.
sendFile = async (text) => {
    const send = await spawn(new Worker('./src/service/sender.js'));
    const result = await send(text);
    console.log(result);
    await Thread.terminate(send);
}
package.json
{
  "name": "XXXXX",
  "version": "1.0.0",
  "description": "XXXXXXX",
  "main": "main.js",
  "scripts": {
    "start": "electron ."
  },
  "author": "",
  "license": "ISC",
  "browser": {
    "fs": false
  },
  "dependencies": {
    "@electron/remote": "^2.0.9",
    "electron": "^24.3.1",
    "md5-file": "^5.0.0",
    "threads": "^1.7.0"
  }
}
How can I use this method in render block?
答案1
得分: 0
我采用以下方法,也许对某些人也有帮助。
我创建了一个方法,在主进程(main.js)中创建 Worker 并获取响应。
sendFile = async (text) => {
    const send = await spawn(new Worker('./src/service/sender.js'));
    const response = await send(text);
    await Thread.terminate(send);
}
在渲染进程(sender.js)中,我导入了 ipcRenderer 并使用 send() 方法向主进程发送信息。
const { ipcRenderer } = require('electron');
ipcRenderer.send('msg', 'Hello from render process');
在主进程(main.js)中,我创建了一个监听器:
const { ipcMain } = require('electron');
ipcMain.on('msg', (event, data) => {
    sendFile(data);
});
英文:
I use the following approach, maybe somebody find it helpful as well.
I created a method which creates Worker in the main process (main.js) and gets a response.
sendFile = async (text) => {
    const send = await spawn(new Worker('./src/service/sender.js'));
    const response = await send(text);
    await Thread.terminate(send);
}
In the render process (sender.js), I imported ipcRenderer and used send() method to send information to the main process.
const { ipcRenderer } = require('electron');
ipcRenderer.send('msg', 'Hello from render process');
and in the main process (main.js), I created a listener:
const { ipcMain } = require('electron');
ipcMain.on('msg', (event, data) => {
    sendFile(data);
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论