首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >node.js setTimeout *有时*醒得比预期要晚得多

node.js setTimeout *有时*醒得比预期要晚得多
EN

Stack Overflow用户
提问于 2013-12-04 01:49:14
回答 1查看 266关注 0票数 0

我有一个可以正常运行的nodejs程序。它做它的事情,然后睡一段时间,然后醒来,并再次这样做。这是非常可靠的。

它还做了一些日志记录,所以我可以观察进度和状态:

代码语言:javascript
复制
[2013-Dec-03 08:01:13] setWakeup
[2013-Dec-03 08:01:13] job4 55 runs per hour
[2013-Dec-03 08:01:13] job4 sleep 59962ms, wake at 08:02:13
[2013-Dec-03 08:02:13] job4 awake
 ....

当它记录“睡眠”时,它实际上是用指定的毫秒数调用setTimeout()。请注意,根据时间戳,“唤醒”消息出现在“睡眠”消息之后大约60秒。

问题是。

有时,此setTimeout不会在预期时间唤醒。我说的不是几毫秒的错失率,甚至不是百分之几。我是说,有时候我想让它休眠60秒,它会休眠45分钟。看看这个。

代码语言:javascript
复制
[2013-Dec-03 07:16:11] setWakeup
[2013-Dec-03 07:16:11] job4 54 runs per hour
[2013-Dec-03 07:16:11] job4 sleep 61297ms, wake at 07:17:12
[2013-Dec-03 08:01:08] job4 awake
 ....

请注意,“唤醒”消息在休眠消息后大约45分钟有一个时间戳。这是在MacBook专业版上,节点v0.10.22。

有没有可能计算机已经进入睡眠状态?如何让它在setTimeout()数量的几个百分比内可靠地唤醒?

EN

回答 1

Stack Overflow用户

发布于 2013-12-04 02:20:20

听起来你的Mac确实睡着了。

您可以使用pmset (一个命令行界面工具)来设置唤醒时间。查看手册页面(man pmset),这可能会在节点上起作用:

代码语言:javascript
复制
var child_process = require('child_process');

// to set a specific wake up time:
child_process.spawn('pmset', [ 'schedule', 'wake', 'time', 'HH:MM:SS' ]);

(其中HH:MM:SS是指您希望唤醒它的时钟时间)。

然而,我不确定你是否能让它足够可靠地唤醒,以达到“在几个百分点内”。

我对setTimeout的内部工作原理也不够熟悉,不知道你的苹果电脑睡着了会不会干扰它(因为它基本上会停止节点进程)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20358148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档