【问题标题】:Electron freezes when executing native NodeJS module执行本机 NodeJS 模块时,Electron 冻结
【发布时间】:2021-04-29 16:21:37
【问题描述】:

我有一些 C++ 代码编写为 NodeJS 本机模块。初始化所有内容的函数会打开一些具有无限 while 循环的线程,这些线程需要一直运行到程序关闭。在命令行中一切正常,但是当我在电子中调用该函数时,它挂起。有什么方法可以从不阻塞的电子调用 C++?

我认为主要问题是,除非应用退出,否则初始化函数永远不会返回,这会使电子感到愤怒(没有错字)。

【问题讨论】:

  • In command line everything works just fine 并不意味着代码在逻辑上是正确的。它可能只在这种情况下工作,但您的线程相关代码中仍然可能存在错误/错误假设,这将导致死锁或类似情况。
  • 我已经在一个独立的 C++ 程序中测试了线程代码。我只做了一些修改,以便可以从 Node 应用程序调用它。
  • 您添加的段落是重要信息。如果您从 JavaScript 调用 C++ 并且该​​ C++ 函数没有返回(阻塞直到线程完成),那么这确实会导致电子冻结。该函数必须返回,并且您的线程必须在后台运行。
  • 那么有没有办法启动线程,让函数返回?我目前正在使用 Thread.join()

标签: c++ node.js electron node-modules


【解决方案1】:

想出了灵魂!谢谢@t.niese!我需要使用Thread.detach(),并在完成后创建一个函数来清理所有内容,而不是使用Thread.join(),它会保留该功能直到应用退出。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 2018-12-03
    • 2019-05-03
    • 2013-04-27
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2018-04-06
    相关资源
    最近更新 更多