【问题标题】:How can I multi-thread in Electron with compatibility for Node.JS and JQuery functions?如何在 Electron 中实现与 Node.JS 和 JQuery 函数兼容的多线程?
【发布时间】:2018-04-26 01:27:46
【问题描述】:

我正在编写一个 Electron 应用程序,其中几个页面旨在通过从我的 Web API 获取 Json 字符串来实时更新表格。重要的部分是我的表格首先必须加载到文档(HTML)中,在我开始一个新的 JavaScript 线程之前或之后(没关系)。我已经需要使用主进程来处理按钮和表格事件。

线程用于持续获取数据,如果它检测到与当前加载的文档的差异,它会将这些更改放回服务器。现在,我无法启动一个可以完全访问 Node、Electron 和 JQuery 中使用的预加载 JS 函数的新线程。

这里列出了我尝试过的方法以及出错的原因,所以也许你可以帮助我找到解决这些问题的方法或提出新的方向(可能是另一个 NPM 模块?):

  • Vanilla WebWorkers |无法使用来自 Node、Electron、JQuery 的任何预定义函数,因为它会启动一个全新的进程。
  • 节点子进程 |这个内置函数派生了一个新线程。但是,它在完全不同的环境中工作,这意味着如果控制台/文档有任何输出,我将无法看到输出。
  • 电子网络工作者 |我在 Docs 上找到了这些并启用了 NodeIntegrationInWorker。但是,它有一个错误,它无法从workers/api/etc 中找到文件,我也无法找到这些文件。请务必注意,这不是我必须安装的模块,因此在搜索 30 分钟后,这些文件甚至在我的系统上都存在 IDK。
  • 我还安装了一些不同的 NPM 模块但无济于事,主要是因为它们是隔离的(例如类似于 Electron WebWorkers 的扩展 WebWorkers)或者它们是隔离的(扩展了不起作用的 child_process().fork 函数或者,来自节点)。
    • 节点进程
    • workerjs
    • 线程
    • webworker-ng
    • 网络工作者线程

最后,为了解决我提到的第三个选项,我尝试关注 ASAR 路径,提到了here。修复了这个错误:

Uncaught Error: ENOENT, worker\api\exports\electron.js not found

但现在我处于加载页面后线程可能会启动但甚至不会将简单的“Hello”记录到控制台的点,这可能是由于出色的线程隔离。

TLDR;我需要一种在 Electron 中运行第二个线程的方法,该线程可以完全访问预定义的对象。这个选项应该希望在主进程之后运行,一旦页面进入无限的 while(True) 循环,就不会停止加载页面。

【问题讨论】:

  • 线程?你在干嘛?处理按钮的主要过程?其他获取数据?带上它,伙计,我认为你已经走到了尽头。
  • 哈哈,也许我有。本质上,我在 JS 中有一个无限循环(使用 Node 和 Electron 对象),它需要与其他 JS 代码(也使用 Node 和 Electron 对象)同时运行。我正在寻找解决所有这些问题的方法。
  • Settimeout 或 setinterval 是你的朋友。
  • 另外,您对 JavaScript、electron 和 node.js 的理解也存在令人难以置信的缺陷。我建议实际阅读它们的实际工作原理

标签: javascript node.js multithreading electron web-worker


【解决方案1】:

正如 Darkrum 在 cmets 中回答的那样:

setTimeOut 或 setInterval 是你的朋友。

经过一些额外的研究(如果我在这里错了请评论):

这两个函数允许“同时”执行代码。因为 Javascript 在技术上只是一种单线程语言,所以不存在真正的多线程。相反,JS 引擎在处理setTimeout 时会不断检查主线程中的更新。

【讨论】:

    猜你喜欢
    • 2016-11-21
    • 2017-05-13
    • 2017-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    • 2021-10-04
    • 1970-01-01
    相关资源
    最近更新 更多