Electron setInterval在一小时后停止与电子

Electron setInterval在一小时后停止与电子,electron,Electron,希望有人能给我指出正确的方向。我的electron应用程序需要每隔10分钟左右执行一次API调用。目前,我在渲染器进程中使用每10分钟触发一次的setInterval循环来执行此操作 它通常工作正常,在它停止发射前的几个小时内。我有几个进程可以清除并重新启动setInterval来尝试解决这个问题,但似乎什么都不起作用 该应用程序会打开新的浏览器窗口并显示内容,这意味着主窗口可能不会一直处于焦点位置,我怀疑这可能与此有关 我试着添加 powerSaveBlocker.start("prevent

希望有人能给我指出正确的方向。我的electron应用程序需要每隔10分钟左右执行一次API调用。目前,我在渲染器进程中使用每10分钟触发一次的setInterval循环来执行此操作

它通常工作正常,在它停止发射前的几个小时内。我有几个进程可以清除并重新启动setInterval来尝试解决这个问题,但似乎什么都不起作用

该应用程序会打开新的浏览器窗口并显示内容,这意味着主窗口可能不会一直处于焦点位置,我怀疑这可能与此有关

我试着添加

powerSaveBlocker.start("prevent-display-sleep");
powerSaveBlocker.start("prevent-app-suspension");
对于我的主electron js脚本,但它似乎没有效果。这个问题主要表现在Windows计算机上。我不完全确定它是发生在Mac还是Linux上

所以我的问题是,有什么原因会发生这种情况,间隔在一个点后消失?powerSaveBlocker的呼叫对我来说很有意义,但它们似乎什么都没做


或者,有没有更好的方法让后台进程每隔一段时间运行,以执行这些API调用?我已经查看了
节点计划
,但我不确定它是否能解决此问题。

据我所知,间隔应该永远保持运行(也没有提及任何内容)

如果我理解正确的话,你的Electron应用程序只调用那个API?所以很难区分不触发的间隔和导致冻结的其他问题之间的区别

我猜您可能会抛出一个未捕获的异常,或者其他类似的错误或事件。给出一些需要注意的问题的建议。表示它可以在主进程和渲染器进程中用于捕获和报告所有问题

或者,有没有更好的方法让后台进程每隔一段时间运行,以执行这些API调用


如果您在Linux上,使用cron运行节点脚本(甚至只是wget或curl命令)要比仅为此使用Electron应用程序要好。任务调度器windows版的cron。

在这里回答我自己的问题,要归功于@snwflk,他在原始帖子的评论中为我指出了正确的方向

虽然我不能绝对肯定地澄清这解决了问题,但从那以后我也没有看到问题。(它并不总是100%可重复,而且很难测试,因为它需要一台机器,单独放置几个小时,这可能会或可能不会显示问题)

然而,我已经向一些客户推出了修复程序,几天后他们的机器似乎仍然在线,这是一个好迹象

因此,解决方案是在主
BrowserWindow
对象上禁用
backgroundThrottling
(interval在渲染器进程中运行)

文件:

一个例子

mainWindow = new BrowserWindow({
    webPreferences: {
        backgroundThrottling: false,
    },
});

请注意,有一些错误阻止了此设置的工作,因此请务必更新您的电子版本。

感谢您的响应,该应用程序可以执行多项操作,主要是在浏览器窗口上显示内容,interval API调用用于执行许可证检查并确保客户拥有有效的许可证。在应用程序之外不可能做到这一点。我怀疑可能是因为主窗口前面有一个新的浏览器窗口,它可能会使线程休眠。我已经有了异常处理和监视,没有抛出任何异常。@Cheyne我刚刚看到snwflk的评论,
backgroundThrottling
(默认为
true
)似乎确实是一个可能的原因,不是吗。是的,很有趣,我不知道这一点。我将尝试一下,看看它是如何进行的。当我知道更多的时候,我会发回。你能发一个最小但完整的例子来重现这种行为吗?由于测试至少需要一个小时,这将是一个漫长的过程。还有,你有最新的电子版吗?你试过禁用吗?有趣的是,我不知道那个设置。谢谢,让我试一试。也许会把它贴出来作为一个答案,以防万一,这样我就可以标记它了。同时检查一下你的电子版本,在有趣的5.0.6版本中,我的背景节流功能似乎已经发生了变化。感谢@snwflk在@snwflk的评论之后,问题似乎是在7.1.4之前,您无法关闭后台限制,这意味着计时器总是被限制:这几乎可以肯定地解释问题,也许snwflk可以发布这些评论作为答案?